java stax获取内部节点的字符串
我正在使用JavaStaxXMLStreamReader来读取xml。我想获取某些内部节点的整个字符串 XML: 检查 检查parser.getElementText()方法 嗯java stax获取内部节点的字符串,java,xml,stax,Java,Xml,Stax,我正在使用JavaStaxXMLStreamReader来读取xml。我想获取某些内部节点的整个字符串 XML: 检查 检查parser.getElementText()方法 嗯 这将获得内部文本,您可以通过常规方法手动添加起始和结束名称。因为XML是一个严格的标准,所以您很好。我上周开始学习StaX,但如果您仍在寻找问题的答案,这可能会帮助您: XMLInputFactory xmlif = XMLInputFactory.newInstance(); xmlif.setPro
这将获得内部文本,您可以通过常规方法手动添加起始和结束名称。因为XML是一个严格的标准,所以您很好。我上周开始学习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);
XMLInputFactory xmlif=XMLInputFactory.newInstance();
setProperty(XMLInputFactory.IS_COALESCING,true);
xmlsr;
字符串result=”;
布尔值isGetme=false;
试一试{
xmlsr=xmlif.createXMLStreamReader(新文件阅读器(“lib/toto.xml”);
int事件类型;
while(xmlsr.hasNext()){
eventType=xmlsr.next();
开关(事件类型){
案例XMLStreamConstants.START_元素:
if(xmlsr.getLocalName().equals(“getMe”)){
isGetme=true;
}
如果(isGetme){
resultat+=“”;
}
打破
大小写XMLStreamConstants.CHARACTERS:
如果(isGetme){
resultat+=xmlsr.getText();
}
打破
案例XMLStreamConstants.END_元素:
if(xmlsr.getLocalName().equals(“getMe”)){
resultat+=“”;
isGetme=false;
}
if(isGetme&!xmlsr.getLocalName().equals(“getMe”)){
resultat+=“”;
}
打破
违约:
打破
}
}
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(XMLStreamException e){
e、 printStackTrace();
}
System.out.println(resultat);
此代码将获取所有内部节点和文本内容,并将其存储到字符串中。
即:
测试
但是,这段代码非常“难看”,肯定不是您所要寻找的最佳解决方案,JDOM可能更适合您的需要。这不是我所要寻找的,我的示例xml很简单,但实际上它很复杂,并且包含要引导的注释。加上解析器.getElementText()为我抛出了一个异常。谢谢。。我最终使用了JDOM。
<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")) {
//??????????????????
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>