gpt4 book ai didi

java - 使用Java Regex解析xml文件

转载 作者:行者123 更新时间:2023-12-01 18:14:08 24 4
gpt4 key购买 nike

出于某种原因,我无法使用 Sax 和 DOM 解析器,需要使用正则表达式对其进行解析。

我想提取键值对中的值(键是标签1中的内容,值是标签3中的内容)。但有些键之间没有任何键值,我必须忽略这些键。

XML 文件

<Main Tag><element><tag1>Key1</tag1><tag2>Not intrested</tag2><tag3>Value1</tag3></element><element><tag1>Key2</tag1><tag2>Not intrested</tag2></element><element><tag1>Key3</tag1><tag2>Not intrested</tag2><tag3>Value3</tag3></element></Main Tag>

上面带有缩进的 xml 文件:

<Main Tag>
<element>
<tag1>Key1</tag1>
<tag2>Not intrested</tag2>
<tag3>Value1</tag3>
</element>
<element>
<tag1>Key2</tag1>
<tag2>Not intrested</tag2>
</element>
<element>
<tag1>Key3</tag1>
<tag2>Not intrested</tag2>
<tag3>Value3</tag3>
</element>
</Main Tag>

因此,从上面的文件中,我需要提取 Key1-Value1 和 Key3-Value3,忽略 Key2,因为它没有值。

使用匹配器:

final Pattern pattern = Pattern.compile("<tag1>(.+?)</tag1>.*<tag3>(.+?)</tag3>");
final Matcher matcher = pattern.matcher(above string);
matcher.find();
System.out.println(matcher.group(1)); // gives Key1
System.out.println(matcher.group(1)); // gives Value3 // instead of Value1

最佳答案

尝试一下这个模式:

"<(tag[13])>(.+?)</tag[13]>"

用法:

public static void main(String[] args) throws Exception {
String xmlString = "<MainTag><element><tag1>Key1</tag1><tag2>Not intrested</tag2><tag3>Value1</tag3></element><element><tag1>Key2</tag1><tag2>Not intrested</tag2></element><element><tag1>Key3</tag1><tag2>Not intrested</tag2><tag3>Value3</tag3></element></MainTag>";

Matcher matcher = Pattern.compile("<(tag[13])>(.+?)</tag[13]>").matcher(xmlString);
while (matcher.find()) {
System.out.println(matcher.group(1) + " " + matcher.group(2));
}
}

结果:

tag1 Key1
tag3 Value1
tag1 Key2
tag1 Key3
tag3 Value3

非正则表达式

或者您可以使用 org.wc3.dom 包中的 DocumentDocumentBuilderFactory

类似于:

public static void main(String[] args) throws Exception {
String xmlString = "<MainTag><element><tag1>Key1</tag1><tag2>Not intrested</tag2><tag3>Value1</tag3></element><element><tag1>Key2</tag1><tag2>Not intrested</tag2></element><element><tag1>Key3</tag1><tag2>Not intrested</tag2><tag3>Value3</tag3></element></MainTag>";
Document xmlDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new ByteArrayInputStream(xmlString.getBytes("utf-8"))));

Node rootNode = xmlDocument.getFirstChild();
if (rootNode.hasChildNodes()) {
// Get each element child node
NodeList elementsList = rootNode.getChildNodes();
for (int i = 0; i < elementsList.getLength(); i++) {
if (elementsList.item(i).hasChildNodes()) {
// Get each tag child node to element node
NodeList tagsList = elementsList.item(i).getChildNodes();
for (int i2 = 0; i2 < tagsList.getLength(); i2++) {
Node tagNode = tagsList.item(i2);
if (tagNode.getNodeName().matches("tag1|tag3")) {
System.out.println(tagNode.getNodeName() + " " + tagNode.getTextContent());
}
}
}
}
}
}

结果:

tag1 Key1
tag3 Value1
tag1 Key2
tag1 Key3
tag3 Value3

关于java - 使用Java Regex解析xml文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30761208/

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