Xml 使用StaX忽略注释
使用以下代码,我成功地读取了XML文件。然而,当注释出现在节点的中间时,读取器将丢弃节点的其余部分。例如:Xml 使用StaX忽略注释,xml,stax,xml-comments,Xml,Stax,Xml Comments,使用以下代码,我成功地读取了XML文件。然而,当注释出现在节点的中间时,读取器将丢弃节点的其余部分。例如: <text>thisismy<!--comment-->document</text> 这可能是代码的问题(您没有显示相关部分),而不是读者的问题。读者不会合并由注释分隔的字符部分,因此您必须为同一个“开始元素”处理多个字符事件谢谢。我想可能是这样的,所以开始这样做。我现在将字符复制到一个缓冲区,然后将其包装到END_元素部分。我觉得很难看,但它很管用
<text>thisismy<!--comment-->document</text>
这可能是代码的问题(您没有显示相关部分),而不是读者的问题。读者不会合并由注释分隔的字符部分,因此您必须为同一个“开始元素”处理多个字符事件谢谢。我想可能是这样的,所以开始这样做。我现在将字符复制到一个缓冲区,然后将其包装到END_元素部分。我觉得很难看,但它很管用。谢谢你的确认。可惜它不支持stripComments模式。
try {
XMLInputFactory factory = XMLInputFactory.newInstance();
factory.setProperty("javax.xml.stream.isCoalescing", true);
XMLEventReader eventReader =
factory.createXMLEventReader(new FileReader(fileName));
while(eventReader.hasNext()) {
XMLEvent event = eventReader.nextEvent();
switch(event.getEventType()) {
case XMLStreamConstants.START_ELEMENT:
StartElement startElement = event.asStartElement();
String qName = startElement.getName().getLocalPart();
if (qName.equalsIgnoreCase("page")) {
page = new DocumentPage();
Iterator<Attribute> attributes = startElement.getAttributes();
while(attributes.hasNext())
{
Attribute attribute = attributes.next();
switch (attribute.getName().toString().toLowerCase()) {
case "index" :
pageIndex = attribute.getValue();
page.setPageIndex(pageIndex);
break;