gpt4 book ai didi

java - Java 中的 DOM 解析器,带有属性和标签值

转载 作者:行者123 更新时间:2023-12-01 15:05:44 31 4
gpt4 key购买 nike

    <Document>
<Folder>
<Placemark id="kml_1">
<name>$1.00 / hr 2hr time limit</name>
<snippet> </snippet>
<styleUrl>#ParkingMeterStyler_KMLStyler</styleUrl>
<ExtendedData>
<SchemaData schemaUrl="#Meter_Rates_and_Time_Limits">
<SimpleData name="RATE">$1.00</SimpleData>
<SimpleData name="LIMIT">2hr</SimpleData>
</SchemaData>
</ExtendedData>
<LineString>
<coordinates>-123.100739208611,49.2630169018194,0 -123.100348847572,49.2630078055425,0 </coordinates>
</LineString>
</Placemark>
</Folder>
</Document>

我在提取“$1.00”和“2hr”时遇到问题:

<SimpleData name="RATE">$1.00</SimpleData>
<SimpleData name="LIMIT">2hr</SimpleData>

到目前为止,我的代码如下所示并成功提取“名称”和“坐标”:

public class Debuger {

public static void main(String argv[]) {

try {

File fXmlFile = new File("parkingMeter.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();

System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("Placemark");
System.out.println("-----------------------");

for (int temp = 0; temp < nList.getLength(); temp++) {

Node nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {

Element eElement = (Element) nNode;

System.out.println("Name : " + getTagValue("name", eElement));

if(eElement.getAttribute("name").equals("RATE")){
System.out.println("Rate : " + getTagValue("SimpleData", eElement));
}else if(eElement.getAttribute("name").equals("LIMIT")) {
System.out.println("Limit : " + getTagValue("SimpleData", eElement));
}

System.out.println("Coordinates : " + getTagValue("coordinates", eElement));

}
}
} catch (Exception e) {
e.printStackTrace();
}
}

private static String getTagValue(String sTag, Element eElement) {
NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();

Node nValue = (Node) nlList.item(0);

return nValue.getNodeValue();
}

}

我真的被困在这里,非常感谢帮助。

最佳答案

问题是这样的:

您的<ExtendedData>标签是 <Placemark> 的第四个子节点节点,您只遍历标签子节点,例如节点并通过getTagValue ,您将迎来第一个孙子。

   NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();

请通过迭代节点的子节点来纠正遍历。它应该可以工作。

关于java - Java 中的 DOM 解析器,带有属性和标签值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12985445/

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