java - 如何在 JAVA 中读取 XML 多个标签
问题描述
我有一个存储在 String 变量中的 XML 格式。就像这样,
字符串 xml = "myXML";
<?xml version="1.0" encoding="UTF-8"?>
<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
<orderperson>John Smith</orderperson>
<shipto>
<name>Ola Nordmann</name>
<address>Langgt 23</address>
<city>4000 Stavanger</city>
<country>Norway</country>
</shipto>
<item>
<title>Empire Burlesque</title>
<note>Special Edition</note>
<quantity>1</quantity>
<price>10.90</price>
</item>
<item>
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item>
</shiporder>
在上面的 XML 中,您可以看到有多个项目。有人可以告诉使用循环或其他东西,我如何将每个项目存储在 arrayList 或其他东西中?如果我可以尝试一下,我会很高兴,但不幸的是,我不知道如何去做。
感谢有人可以提供帮助吗?
请注意,XML 作为字符串存储在字符串变量中。
解决方案
您可以创建一个 ArrayList 项目,如下面的代码:
import java.io.StringReader;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
public class Lab {
public static Map<String,List<String>> hMap = new LinkedHashMap<>();
public static void main(String r[]) {
// your xml string
String s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" +
"\r\n" +
"<shiporder orderid=\"889923\"\r\n" +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n" +
"xsi:noNamespaceSchemaLocation=\"shiporder.xsd\">\r\n" +
" <orderperson>John Smith</orderperson>\r\n" +
" <shipto>\r\n" +
" <name>Ola Nordmann</name>\r\n" +
" <address>Langgt 23</address>\r\n" +
" <city>4000 Stavanger</city>\r\n" +
" <country>Norway</country>\r\n" +
" </shipto>\r\n" +
" <item>\r\n" +
" <title>Empire Burlesque</title>\r\n" +
" <note>Special Edition</note>\r\n" +
" <quantity>1</quantity>\r\n" +
" <price>10.90</price>\r\n" +
" </item>\r\n" +
" <item>\r\n" +
" <title>Hide your heart</title>\r\n" +
" <quantity>1</quantity>\r\n" +
" <price>9.90</price>\r\n" +
" </item>\r\n" +
"</shiporder>";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(s));
Document doc = builder.parse(is);
doc.getDocumentElement().normalize();
NodeList nodeList = doc.getElementsByTagName("item");
for (int parameter = 0; parameter < nodeList.getLength(); parameter++) {
List<String> items = new ArrayList<>();
Node node = nodeList.item(parameter);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) node;
String title = eElement.getElementsByTagName("title").item(0).getTextContent();
String quantity = eElement.getElementsByTagName("quantity").item(0).getTextContent();
String price = eElement.getElementsByTagName("price").item(0).getTextContent();
items.add(title);
items.add(quantity);
items.add(price);
hMap.put("item" + parameter, items);
}
}
} catch (Exception e) {
e.printStackTrace();
}
hMap.forEach((h,k) -> {
System.out.println(h + ":" + k); // you can get values like hMap.get("item0") and next hMap.get("item1") etc.
});
}
}
希望对您有所帮助。我只收集了item的共同元素。希望对你有帮助:)
推荐阅读
- python - 对象在动态类型创建期间被子类化,但不是在 python2 中的经典类定义期间
- ios - 如何在应用启动时根据用户是否登录来处理显示不同的视图控制器?
- hyperledger-fabric - 查询区块链时出现“错误:没有合适的对等方可用于初始化”
- java - 在测试运行时访问魅力报告
- python - BeautifulSoup find_all() 不返回任何内容 []
- c# - 使用 ZKteco 考勤设备将特殊数据写入 Mifare IC 卡
- c - 如何修复不读取文本文件的功能(验证输入)?
- android - 是否可以将文件从一个应用程序复制到另一个应用程序的 ExternalFilesDirectory?
- java - Java 语法能够用随机文本替换通配符参数
- c# - 在引发系统异常之前触发插件