gpt4 book ai didi

java - 从字符串中包含的 XML 的嵌套标记中获取值

转载 作者:行者123 更新时间:2023-11-30 08:34:08 26 4
gpt4 key购买 nike

我正在尝试从 XML 的嵌套标记中读取值,但遇到了问题。

我的 XML 文件名为 NewFile.xml 我正在尝试读取 tag4 中的值。

<?xml version="1.0"?>
<tag1>
<tag2>
<tag3>
<tag4>read me</tag4>
</tag3>
</tag2>
</tag1>

这是一个名为 Test.java 的主类,它读取该 XML 文件并将其转换为字符串,然后将其发送给阅读器类中名为 lookUpValue 的方法。

public class test {

public static void main(String [] args) throws IOException, XPathExpressionException
{
BufferedReader br = new BufferedReader(new FileReader(new File("NewFile.xml")));
String xmlString;
StringBuilder sb = new StringBuilder();

while((xmlString=br.readLine())!= null){
sb.append(xmlString.trim());
}

xmlString = sb.toString();

System.out.print(reader.LookUpValue(xmlString));
br.close();
}
}

这是阅读器类和 LookupValue 方法:

import java.io.StringReader;

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.xml.sax.InputSource;

public class reader{

public static String LookUpValue(String sb) throws XPathExpressionException
{
InputSource source = new InputSource(new StringReader(sb));
XPath xpath = XPathFactory.newInstance().newXPath();
Object customer = xpath.evaluate("/tag1/tag2/tag3", source, XPathConstants.NODE);
String value = xpath.evaluate("tag4", customer);

return ("Value is: " + value);
}
}

我的问题是,当我运行这个程序时,我现在如何读取 tag4 中的值,我收到以下错误。

Exception in thread "main" 
javax.xml.transform.TransformerException: Unable to evaluate expression using this context
at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:363)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(XPathImpl.java:213)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:275)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:365)
at reader.LookUpValue(LookUpValue.java:21)
at test.main(test.java:26)
Caused by: java.lang.RuntimeException: Unable to evaluate expression using this context
at com.sun.org.apache.xpath.internal.axes.NodeSequence.setRoot(NodeSequence.java:212)
at com.sun.org.apache.xpath.internal.axes.LocPathIterator.execute(LocPathIterator.java:210)
at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:335)
... 5 more
---------
java.lang.RuntimeException: Unable to evaluate expression using this context
at com.sun.org.apache.xpath.internal.axes.NodeSequence.setRoot(NodeSequence.java:212)
at com.sun.org.apache.xpath.internal.axes.LocPathIterator.execute(LocPathIterator.java:210)
at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:335)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(XPathImpl.java:213)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:275)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:365)
at reader.LookUpValue(LookUpValue.java:21)
at test.main(test.java:26)
--------------- linked to ------------------
javax.xml.xpath.XPathExpressionException
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:289)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:365)
at reader.LookUpValue(LookUpValue.java:21)
at test.main(test.java:26)
Caused by: javax.xml.transform.TransformerException: Unable to evaluate expression using this context
at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:363)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(XPathImpl.java:213)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:275)
... 3 more
Caused by: java.lang.RuntimeException: Unable to evaluate expression using this context
at com.sun.org.apache.xpath.internal.axes.NodeSequence.setRoot(NodeSequence.java:212)
at com.sun.org.apache.xpath.internal.axes.LocPathIterator.execute(LocPathIterator.java:210)
at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:335)
... 5 more

最佳答案

import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.xml.sax.InputSource;

public class Reader {
public static String lookUpValues(String sb) throws Exception{

DocumentBuilder builder = DocumentBuilderFactory
.newInstance().newDocumentBuilder();
InputSource src = new InputSource();
src.setCharacterStream(new StringReader(sb));

Document doc = builder.parse(src);
String value = doc.getElementsByTagName("tag4").item(0).getTextContent();

return value;
}
}

关于java - 从字符串中包含的 XML 的嵌套标记中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39042550/

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