如何在单个标记中获取包含多个冒号的xml属性值,即名称空间?

时间:2018-02-08 08:15:19

标签: java xml xml-parsing

这是我的XML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
  <feed xml:base="XYZ" xmlns:d="http://schemas/services" xmlns:m="http://schemas/metadata" xmlns="http://www.abc.pqr/Atom">
  <title type="text">Title</title>
  <id>Id</id>
  <updated>2018-02-08</updated>
  <link rel="self" title="titl" href="title" />
  <entry m:etag="W/&quot;25&quot;">
    <id>id1</id>
    <title type="text">title_text</title>
    <updated>2018-02-08</updated>
    <author>
    <name />
    </author>
    <link m:etag="&quot;{acx},25&quot;" rel="edit-media" title="title_value" />
    <link rel="edit" title="title" />
    <link rel="http://az.com/CreatedBy" type="application/atom+xml;type=entry" title="CreatedBy" href="title/CreatedBy" />
    <link rel="http://az.com/ModifiedBy" type="application/atom+xml;type=entry" title="ModifiedBy" href="title/ModifiedBy" />
    <link rel="http://az.com/CheckedOutTo" type="application/atom+xml;type=entry" title="CheckedOutTo" href="title/CheckedOutTo" />
    <category term="xyz" scheme="xyz" />
    <content type="application/octetstream" src="http://collb.xlsm" />
    <m:properties xmlns:m="http://xyz/metadata" xmlns:d="wsx/dataservices">
       <d:ContentTypeID>contentId</d:ContentTypeID>
       <d:Dept>21</d:Dept>
       <d:Class>0</d:Class>      
       <d:Id m:type="Edm.Int32">2121</d:Id>
    </m:properties>
  </entry>
  <link rel="next" href="http://tyu.com" />
  </feed>

我想阅读与<d:Id m:type><entry m:etag>对应的值,即输出应为212125

我应该如何阅读这些内容。

P.S:我在stackoverflow上遇到了类似的问题,但没有任何对我有用。

我的部分代码:

 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
 builderFactory.setNamespaceAware(true);
 DocumentBuilder documentBuilder = documentBuilder = builderFactory.newDocumentBuilder();
 Document doc = documentBuilder.parse(connection.getInputStream());
 Element element = doc.getDocumentElement();
 element.getAttributeNodeNS("http://schemas/metadata", "type");

1 个答案:

答案 0 :(得分:0)

您还没有说过您正在使用哪种Java API。我猜这可能意味着你正在使用DOM。我不知道为什么有更好的替代方案仍有人使用DOM,但他们确实如此。

无论您使用哪种API,您都会发现可能存在类似

的方法
element.getAttributeValue(namespace, localname)

要阅读m:type属性,请使用

element.getAttributeValue("http://schemas/metadata", "type")