2011-11-15 31 views
0

我正在使用STAX Parser解析XML文档。 我有这个标签之下为什么此XML标记的属性计数为0

<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计数为0。 请告诉我如何可以读取所有bustxml标签

+0

在您的示例FYI中,您打开一个CDATA节而不关闭它 – Justin

+0

嗨贾斯汀,为安全性我没有发布整个XML。所以我想这不是一个问题。 – Pawan

回答

0

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

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

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

在你的情况下,他们不仅将它包装在CDATA中,而且还将其转义出来,从而使它倍加困难。所以他们已经有效地双重转义了它,所以你必须通过解析器两次(除了原始解析)来理解它。

我会非常大声抱怨发送给你垃圾的人。

2

bustxml元素没有属性里面的内容,如果没有它应该是这样的:

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

如果你想阅读的内容bustxml元素,那么你应该使用getElementText来代替。

更新:如果你在谈论中所含CDATA部分编码的XML片段bustxml元素,那么你需要提取此CDATA片段的文本,然后解析/提取物从它的属性来代替。

+0

谢谢,我应该在哪里使用getElementText或getText?因为reader.getAttributeCount();现在是0,(根据属性计数) – Pawan

+0

@ yyyi777我相信你应该使用'getElementText',但我不是100%确定(我通常是一个C#开发人员) – Justin

+0

我试图提取使用CData的内容,bustxml = reader.getName()。toString();但我们仍然可以如何从这个获得属性计数? – Pawan

相关问题