gpt4 book ai didi

java - 在 java 中读取和获取 xml 值

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

我的列数据是采用 Base64 加密的 XML 格式。我通过使用 java 获得了值,但是所有的值都得到了,我只想要特定的值

<?xml version="1.0" encoding="UTF-8"?>
<event id="370e7324-3-85ec-63dac16aacb6">
<properties>
<property enc="BASE64" name="state" value="Hrthyw35WmnmewqzRlYXI="/>
<property enc="BASE64" name="record" value="mjhm65WmnmewqzRlYXI="/>
<property enc="BASE64" name="application" value="Q2FsZWmnmewqzRlYXI="/>
</properties>
</event>

我的java代码是

try {
Query q="select xml from empdata";
String xml = result.getString(1);
System.out.println("----xml----"+xml);
sqlService.dbRead(connection,sql.toString(),new SqlReader()
{
@Override
public Object readRecord(ResultSet result)
{
try {
String xml = result.getString(1);

// read the xml
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xml));
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(is);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("property");
String name = null;
String value = null;
for (int temp = 0; temp < nList.getLength(); temp++) {
Node node = nList.item(temp);
Element element=null;
if (node.getNodeType() == Node.ELEMENT_NODE) {
element = (Element) node;
name= element.getAttribute("name");
value = element.getAttribute("value");
System.out.println("--value--"+value+"----name----"+name);
}
}
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
});
}catch (SQLException e) {
e.printStackTrace();
}

我得到了三个名称和三个值,但我只想要第三个名称和值。

最佳答案

假设您想要一个名称为“应用程序”的应用程序..

您还可以简化代码,无需检查节点的类型,getElementsByTagName 只会返回元素类型的节点。

例子

String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<event id=\"370e7324-3-85ec-63dac16aacb6\">\n"
+ "<properties>\n" + "<property enc=\"BASE64\" name=\"state\" value=\"Hrthyw35WmnmewqzRlYXI=\"/>\n"
+ "<property enc=\"BASE64\" name=\"record\" value=\"mjhm65WmnmewqzRlYXI=\"/>\n"
+ "<property enc=\"BASE64\" name=\"application\" value=\"Q2FsZWmnmewqzRlYXI=\"/>\n" + "</properties>\n"
+ "</event>\n";

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(new InputSource(new StringReader(xml)));
doc.getDocumentElement().normalize();
NodeList properties = doc.getElementsByTagName("property");

for (int index = 0; index < properties.getLength(); index++) {
Node node = properties.item(index);
Element element = (Element) node;
if ("application".equals(element.getAttribute("name"))) {
String name = element.getAttribute("name");
String valueEncoded = element.getAttribute("value");
String decoded = new String(Base64.getDecoder().decode(valueEncoded));
System.out.println("--value--" + decoded);
}
}

作为编写自己的过滤逻辑的替代方法,您可以使用 XPath 来表示,一种具有 native Java 支持的 XML 选择语言。

XPath xPath = XPathFactory.newInstance().newXPath();
Element element = (Element) xPath.compile("//property[@name=\"application\"]").evaluate(doc, XPathConstants.NODE);
String value = element.getAttribute("value");

关于java - 在 java 中读取和获取 xml 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36734959/

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