我正在使用STAX Parser来解析XML文档。 我有以下标签
<bustxml><![CDATA[<bustxml xmlns=\"http://www.bustprotocol.org/bustxml-5-0-SP2\"><NewOrdMBag TmInForce=\"0\" OrdTyp=\"1\" Acct=\"1234\"><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标签内的所有内容
答案 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中,而且还将其转移,这使它变得更加困难。所以他们实际上已经对它进行了双重转义,所以你必须将它通过解析器两次(除了原始解析)才能理解它。
我会非常大声地向那些寄给你垃圾的人抱怨。