gpt4 book ai didi

java - 使用 SAX 解析 XML 时出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 14:56:57 25 4
gpt4 key购买 nike

我有一个正在尝试解析的 XML。

<Tests>
<Test>
<Blocks>
<Block>
<BlockId>2</BlockId>
<Name>CCCC</Name>
<Type>Action</Type>
<TaskId>2</TaskId>
<Send>
<WId>284</WId>
<BlockId>14</BlockId>
</Send>
</Block>
<Block>
<BlockId>10</BlockId>
<Name>START VM4</Name>
<Type>Action</Type>
<TaskId>10</TaskId>
<Send />
</Block>
<Block>
<BlockId>12</BlockId>
<Name>SHUT</Name>
<Type>Action</Type>
<TaskId>12</TaskId>
<Send />
</Block>
</Blocks>
</Tests>
</Test>

我正在使用 SAX 来解析它。一切正常,但每次我循环时,我应该得到一个 id 为 2 的 block ,然后是另一个 blockid 为 10 的 block ,然后是 12。然后我将所有这些 block 添加到测试中。

我的部分代码是:

public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
nqName = qName;
tag_name_List.setElementAt(nqName, level);
level = level + 1;

}

public void endElement(String uri, String localName,
String qName) throws SAXException {
level = level - 1;
tag_name_List.removeElementAt(level);
}

public void characters(char ch[], int start, int length) throws SAXException {

if (level != 0) {
////////////////Some code
} else if (level == 5
&& tag_name_List.elementAt(1).equals("Test")
&& tag_name_List.elementAt(2).equals("Blocks")
&& tag_name_List.elementAt(3).equals("Block")
&& (nqName.equalsIgnoreCase("BlockId"))) {
block = new Block();
test.addBlock(block);
block.setId(new String(ch, start, length));
block.setWorkflowId(workflow.getId());

} else if (level == 5 && ...) {
////// Code continues

注意这是一个巨大的 xml 和巨大的代码,所以只分享部分......

但这里的问题是:

  • 第一次获得id2时,
  • 然后“\n”
  • 然后再次将id设置为10
  • 然后“\n”
  • 然后id 12
  • 然后“\n”

我不确定为什么会收到这些"\n "

我可以设置 if 条件来避免该实体,但如果这样做,我会丢失附加到该 id 的一些信息,这些信息稍后会与该 关联>“\n”id

有没有人遇到过这个问题,可以指点一下。

如果需要更多信息,请告诉我。

调试代码后我发现,它基本上是从

末尾取出 "\n "
<BlockId>14</BlockId>

因为这里的下一行将有 \r"\n "

如何避免这种情况?

最佳答案

您分配nqName = qName。在下一次迭代之前您是否会更改该值?

如果您在离开 BlockId 元素的上下文时不更改该值,则它仍然等于 BlockId例如,您位于元素外部,但尚未位于Name 内部。 characters() 方法将读取它在那里找到的所有空白。

可能应该在 endElement() 中重置 nqName。尝试添加

nqName = null;

到您的 endElement() 方法。

关于java - 使用 SAX 解析 XML 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23090850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com