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

为什么此XML标记的属性计数为0,xml,dom,xml-parsing,sax,stax,Xml,Dom,Xml Parsing,Sax,Stax,我正在使用STAX解析器解析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> 我需要读

我正在使用STAX解析器解析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));
case XMLStreamConstants.START\u元素:
对于(int i=0,n=reader.getAttributeCount();i
但不幸的是,我得到的属性数为0。
请告诉我如何读取bustxml标记中的所有内容,
bustxml
元素没有属性,如果有,则如下所示:

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

如果要读取
bustxml
元素的内容,则应使用
getElementText


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

CDATA之外的bustxml元素没有属性

CDATA中的bustxml不是标记。这就是CDATA的意思:“这是字符数据。不要将在这里找到的任何内容视为标记。”因此,内容可能看起来像标记,但由于CDATA,它不是标记,因此它没有属性

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

在您的情况下,他们不仅将其包装在CDATA中,而且还将其转义,这使它变得更加困难。因此,它们实际上是双重转义的,因此您必须将其通过解析器两次(除了原始解析之外)才能理解它


我会非常大声地向发送这些垃圾的人抱怨。

FYI在您的示例中,您打开了一个CDATA部分,但没有关闭I Justin,出于安全考虑,我没有发布整个XML。所以我想这不是问题。谢谢,我应该在哪里使用这个getElementText或getText?因为reader.getAttributeCount();现在是0(根据属性计数)@yyyi777我认为您应该使用
getElementText
,但是我不是100%确定(我通常是一名C#开发人员),我尝试使用bustxml=reader.getName().toString()提取CData的内容;但是我们怎么能从中得到属性计数呢??