使用DOM解析器解析xml并添加限制
问题描述:
我正在尝试为我的xml使用DOM解析器。代码如下。它按标签类型及其属性(如价格和颜色)列出所有元素。然而,我很难找到如何给代码添加限制,比如“给我所有10美元以上的笔”或“笔的颜色是黑色的名字”。有人可以帮我吗。使用DOM解析器解析xml并添加限制
感谢
我.xml文件看起来是这样的:
<equipment>
<type>
<description>pen</description>
<name>parker</name>
<price value="USD">8.00</price>
<color>black</color>
</type>
<type>
<description>pen</description>
<name>ball point</name>
<price value="USD">20.00</price>
<color>purple</color>
</type>
<type>
<description>pen</description>
<name>sharpie</name>
<price value="USD">15.00</price>
<color>blue</color>
</type>
<type>
<description>pen</description>
<name>staples</name>
<price value="USD">6.00</price>
<color>red</color>
</type>
<type>
<description>pen</description>
<name>integra</name>
<price value="USD">12.00</price>
<color>white</color>
</type>
这里是代码为我的解析器
public static void main(String[] args)throws SAXException, IOException, ParserConfigurationException {
File fXmlFile = new File("docs\\abc.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("type");
for(int i=0;i<nList.getLength();i++){
Node nNode = nList.item(i);
if(nNode.getNodeType() == Node.ELEMENT_NODE){
Element eElement = (Element) nNode;
System.out.println("Name:" + getTagValue("name", eElement));
System.out.println("Price: "+ getTagValue("price", eElement));
System.out.println(getAttributeValue("price", "value", eElement));
System.out.println("Description: "+getTagValue("description", eElement));
System.out.println("color:"+ getTagValue("color", eElement));
}
}
}
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();
}
private static String getAttributeValue(String sTag, String attributeName, Element eElement){
NamedNodeMap nodeMap = eElement.getElementsByTagName(sTag).item(0).getAttributes();
return nodeMap.getNamedItem(attributeName).getNodeValue();
}
}
答
如果你想添加过滤器你最好做手工,并采用XMLStreamReader的可能help.follow步骤:
- 将您的XML文件导入使用Transformer
- 字符串中的字符串转换为字节数组并将其传递给XMLStreamReader。
- 迭代从一个元素到另一个
Transformer t=TransformerFactory.newInstance().newTransformer();
StringWriter sw=new StringWriter();
StreamResult result=new StreamResult(sw);
DOMSource d=new DOMSource(XMLdoc);
t.transform(d, result);
tring xmlstring=sw.toString();
ByteArrayInputStream bain = new yteArrayInputStream(xmlstring.getBytes());
XMLInputFactory factory1 = XMLInputFactory.newInstance();
XMLStreamReader reader = factory1.createXMLStreamReader(bain);
while(reader.hasNext())
{
reader.next();
if(reader.getEventType==XMLStreamReader.START_ELEMENT)
{
if(reader.getLocalName().equals("price"))
{
//your logic
}
}
}
希望它有助于..
添加XML文件在这里为您解决问题,这将有助于我们, – gks
你好,请找到上面更新的 – rob