libxml reader:如何读取属性值以保留实体引用?

时间:2011-04-13 20:00:29

标签: c xml libxml2

我正在使用libxml2流式阅读器,我无法阅读实体引用。当实体引用在元素内容中时,它被视为类型XML_READER_TYPE_ENTITY_REFERENCE的节点,可以这样读取:

示例XML:

<p>Wikipedia&reg; is a registered trademark</p>

示例C代码:

xmlTextReaderRead(reader);
if (xmlTextReaderNodeType(reader) == XML_READER_TYPE_ENTITY_REFERENCE)
{
     const xmlChar *entityRef = xmlTextReaderConstName(reader);
     ///entityRef will be "reg"
}

读者会发出以下警告,但它对解析没有影响:

file://localhost/Volumes/Users/ben/testdata.html:1001: parser error : Entity 'reg' not defined
Wikipedia&reg; is a registered trademark of the <a href="http://www.wikimediafou
              ^

当实体引用在属性中时,事情并不那么简单:

示例XML:

<img alt="random text containing &reg; entity reference" src="notImportant" />

我正在阅读这样的属性:

while (xmlTextReaderMoveToNextAttribute(self.reader) == 1)
{
    const xmlChar *attribName  = xmlTextReaderConstName(self.reader);
    const xmlChar *attribValue = xmlTextReaderConstValue(self.reader);

    //process the attribute
}

如果属性值包含实体引用attribValue,则省略它,例如:

//attribValue = "random text containing  entity reference"

如何检索属性值以使实体引用不丢失?

(我认为这样做的方法是读取属性值使用xmlReaderRead,以便将该值视为XML_READER_TYPE_ENTITY_REFERENCEXML_READER_TYPE_TEXT个节点,但我无法弄清楚怎么做。)

0 个答案:

没有答案