gpt4 book ai didi

java stax 获取内部节点的字符串

转载 作者:行者123 更新时间:2023-11-30 07:35:48 28 4
gpt4 key购买 nike

我正在使用 java stax XMLStreamReader 来读取 xml。我想抓取某些内部节点的整个字符串。

XML:

<example>
<ignoreMe>
<bla></bla>
</ignoreMe>
<getMe>
<data></data>
</getMe>
</example>

我只想能够在字符串中获取整个内部 getMe 节点。即:

   <getMe>
<data></data>
</getMe>

这是我所拥有的..但我被卡住了:

XMLStreamReader parser = factory.createXMLStreamReader(new FileReader(file)); 
for (int event = parser.next();
event != XMLStreamConstants.END_DOCUMENT;
event = parser.next()) {

switch (event) {
case XMLStreamConstants.START_ELEMENT:
if (parser.getLocalName().equals("GetMe")) {
//??????????????????

最佳答案

我上周开始学习 StaX,但如果您仍在寻找问题的答案,这可能会对您有所帮助:

    XMLInputFactory xmlif = XMLInputFactory.newInstance();
xmlif.setProperty(XMLInputFactory.IS_COALESCING, true);
XMLStreamReader xmlsr;
String resultat="";
boolean isGetme=false;

try {
xmlsr = xmlif.createXMLStreamReader(new FileReader("lib/toto.xml"));
int eventType;
while (xmlsr.hasNext()) {
eventType = xmlsr.next();
switch (eventType) {
case XMLStreamConstants.START_ELEMENT:
if(xmlsr.getLocalName().equals("getMe")){
isGetme=true;
}
if(isGetme){
resultat+="<"+xmlsr.getLocalName()+">";
}
break;
case XMLStreamConstants.CHARACTERS:
if(isGetme){
resultat+=xmlsr.getText();
}
break;
case XMLStreamConstants.END_ELEMENT:
if(xmlsr.getLocalName().equals("getMe")){
resultat+="</"+xmlsr.getLocalName()+">";
isGetme=false;
}
if(isGetme && !xmlsr.getLocalName().equals("getMe")){
resultat+="</"+xmlsr.getLocalName()+">";
}
break;
default:
break;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (XMLStreamException e) {
e.printStackTrace();
}
System.out.println(resultat);

此代码将为您获取所有内部节点和文本内容,并将其存储到一个字符串中。即:

<getMe>
<data>test</data>
</getMe>

但是,这段代码非常“丑陋”,肯定不是您正在寻找的最佳解决方案,JDOM 可能更适合您的需求。

关于java stax 获取内部节点的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4149183/

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