gpt4 book ai didi

java - 如何获取包含冒号的xml属性值?

转载 作者:数据小太阳 更新时间:2023-10-29 02:35:28 61 4
gpt4 key购买 nike

我正在尝试在 java 中使用 Xpath 解析 xml 文件。我需要获取属性值为 xml:lang="en"的文本元素下的所有元素值。

这是我的 xml 文件:

<?xml version="1.0" encoding="UTF-8" ?>
<image id="10001" file="images/2/10001.png">
<name>Lake two mountains.png</name>
<text xml:lang="en">
<description />
<comment />
<caption article="text/en/4/335157">Location map of Lake of Two Mountains. </caption>
</text>
<text xml:lang="de">
<description/>
<comment />
<caption article="text/de/5/441485">Lage des Lac des Deux Montagnes (ganz rechts liegt Montréal)</caption>
</text>
<text xml:lang="fr">
<description />
<comment />
<caption />
</text>
<comment>({{Information |Description= Location map of Lake of Two Mountains in Quebec, Canada. |Source= based on Image:Oka map with roads.png. |Date= |Author= P199 |Permission= |other_versions= }})</comment>
<license>GFDL</license>
</image>

这是我的java代码片段:

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
Document xmlDocument = null;
try {
builder = builderFactory.newDocumentBuilder();
}
catch (ParserConfigurationException e) {
e.printStackTrace();
}

try {
xmlDocument = builder.parse(new FileInputStream(fileEntry.getAbsolutePath()));
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

XPath xPath = XPathFactory.newInstance().newXPath();

//prepare node expressions
String nameExpr = "/image/name";
String descriptionExpr = "/image/text[@lang='en']/description";
String captionExpr = "/image/text[@lang='en']/caption";
String commentExpr = "/image/text[@lang='en']/comment";

//read a string value
String name = xPath.compile(nameExpr).evaluate(xmlDocument);
String description = xPath.compile(descriptionExpr).evaluate(xmlDocument);
String caption = xPath.compile(captionExpr).evaluate(xmlDocument);
String comment = xPath.compile(commentExpr).evaluate(xmlDocument);

我尝试了一些 Xpath 表达式来获取元素值,例如:

(1)/image/text[@xml:lang='en']/description"不起作用。

(2)/image/text[@lang='en']/description"工作正常。

我很想知道第一个 Xpath 表达式有什么问题。

提前致谢。

最佳答案

由于某些(可能是历史的)原因,DocumentBuilderFactory 默认情况下 命名空间感知。在调用 newDocumentBuilder() 之前,您必须在工厂上调用 setNamespaceAware(true),因为 XPath 仅适用于已解析为命名空间感知的 XML。

然后我会推荐使用 lang function做实际测试:

/image/text[lang('en')]/description

关于java - 如何获取包含冒号的xml属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21876386/

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