当xml具有名称空间和多个标记

时间:2016-04-07 20:09:16

标签: xml xpath namespaces xml-namespaces

我必须从下面的xml中提取文本'testpoc'。 请通过提供相关的xpath来帮助我。

               '<am:entry>`    `    
  `                <am:content type="application/xml">`
                    `<s:series-poc>`
                       '<s:c_series.c_id>testpoc</s:c_series.c_id>'   
                     </s:series-poc>                    
                   </am:content>
                </am:entry>

我尝试过使用以下路径,但没有运气。

A)( “// * [本地名称()= 'c_series.c_id'] /文本()”),

B)( “/进入/内容/串联POC / c_series.c_id /文本()”),

C)( “/进入/内容/串联POC // * [本地名称()= 'c_series.c_id'] /文本()”)

感谢您在这方面的所有支持。

2 个答案:

答案 0 :(得分:0)

您的XPath API应该提供一种将名称空间前缀绑定到URI的方法,例如

XPath.declareNamespace("am", "http://something.com/");
XPath.declareNamespace("s", "http://something.else.com/");

然后,您可以选择内容

/am:entry/am:content/s:c_series.c_id

如果您无法以这种方式绑定前缀,则依赖于local-name()的谓词是最后的手段。

您使用的是什么API?

答案 1 :(得分:0)

为您提供详细信息,同时查看下面的xml -

使用的命名空间:       的xmlns:C =&#34; HTTP://iddn.abc.com/ns/core"的xmlns:F =&#34; HTTP://iddn.abc.com/ns/fields"的xmlns:A =&#34; HTTP://iddn.abc.com/ns/assets"的xmlns:S =&#34; HTTP://iddn.abc.com/ns/search"&GT;

     <atom:entry>
        <atom:content type="application/vnd">
          <s:series-item-abc-poc>
            <s:c_series.c_id>testpoc</s:c_series.c_id>
          </s:series-item-abc-poc>
         </atom:content>
     </atom:entry>

我尝试按照您的建议声明命名空间,但是,我无法获取s:c_series.c_id标记的值。这就是我做的 -

xpath = XPathFactory.newInstance()。newXPath();

XPath.declareNamespace(&#34; s&#34;,&#34; http://iddn.abc.com/ns/search&#34;);

expr = xpath.compile(&#34; // atom:entry / atom:content / s:series-item-abc-poc / s:c_series.c_id / text()&#34;);

如果我在这里缺少某些东西,请告诉我。

感谢您对此支持。