为什么此XML标记的属性计数为0

时间:2011-11-15 13:05:30

标签: xml dom xml-parsing sax stax

我正在使用STAX Parser来解析XML文档。 我有以下标签

<bustxml><![CDATA[&lt;bustxml xmlns=\"http://www.bustprotocol.org/bustxml-5-0-SP2\"&gt;&lt;NewOrdMBag TmInForce=\"0\" OrdTyp=\"1\" Acct=\"1234\"&gt;&lt;Ord OrdQty=\"1\" </bustxml>

我需要阅读上述标签的属性,所以我使用了

 case XMLStreamConstants.START_ELEMENT:
                 for(int i = 0, n = reader.getAttributeCount(); i < n; ++i)
                  System.out.println("Attribute: " + reader.getAttributeName(i) 
                             + "" + reader.getAttributeValue(i));

但不幸的是我得到了,Attrbute Count为0。 请告诉我如何阅读bustxml标签内的所有内容

2 个答案:

答案 0 :(得分:2)

bustxml元素没有属性,如果有,它将如下所示:

<bustxml MyAttribute="MyValue">
<!-- Content -->
</bustxml>

如果您想阅读bustxml元素的内容,则应使用getElementText代替。

更新:如果您正在讨论CDATA部分中包含的编码xml片段中的bustxml元素,那么您需要提取此CDATA片段的文本,然后解析/提取来自它的属性。

答案 1 :(得分:0)

CDATA外部的bustxml元素没有属性。

CDATA内的bustxml不是标签。这就是CDATA的意思:“这是字符数据。不要把你在这里找到的任何东西视为标记。”所以内容可能看起来像一个标签,但它不是标签,因为CDATA,因此它没有属性。

不幸的是,人们采用XML并在CDATA中包装是很常见的。他们这样做是为了让你的生活变得困难。 (我认为这就是原因,我想不出任何其他原因。)当发生这种情况时,你唯一的办法是提取CDATA中的文本并将其提交给XML(或HTML)解析器将其转换为树,然后你可以正常方式访问元素和属性。

在你的情况下,他们不仅将它包装在CDATA中,而且还将其转移,这使它变得更加困难。所以他们实际上已经对它进行了双重转义,所以你必须将它通过解析器两次(除了原始解析)才能理解它。

我会非常大声地向那些寄给你垃圾的人抱怨。