Java 获取 xml 元素中的属性值
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4138754/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Getting an attribute value in xml element
提问by yogsma
I have an xml string like this and I want to get attribute value of "name" in a loop for each element. How do I do that? I am using javax.xml.parsers library.
我有一个这样的 xml 字符串,我想在每个元素的循环中获取“name”的属性值。我怎么做?我正在使用 javax.xml.parsers 库。
<xml>
<Item type="ItemHeader" name="Plan Features" id="id_1"/>
<Item type="Deductible" name="Deductible" id="a">Calendar Year
<Item type="Text" name="Individual" id="b">200</Item>
<Item type="Text" name="Family" id="c">350</Item>
</Item>
<Item lock="|delete|" type="Empty" name="Out-of-Pocket Annual Maximum" id="id_2">
<Item type="Text" name="Individual" id="d">400</Item>
<Item type="Currency" name="Individual Out-of-Network" id="id_5">0.00</Item>
<Item type="Text" name="Family" id="e">670</Item>
</Item>
<Item type="Text" name="Life Time Maximum" id="u">8000</Item>
<Item type="Text" name="Coinsurance" id="f">60</Item>
<Item type="Text" name="Office Visits" id="g">10</Item>
<Item type="Text" name="Routine Physicals" id="h">12</Item>
<Item type="Text" name="Preventive Care" id="m"/>
<Item type="Text" name="Physician Services" id="i"/>
<Item type="Text" name="Emergency Room Services / Urgent Care" id="j"/>
<Item type="Text" name="Hospital Admission Services" id="k"/>
<Item type="Text" name="Chiropractic" id="n"/>
<Item type="Text" name="Prescription Drugs" id="l"/>
<Item type="Text" name="Specialty Drugs" id="o"/>
<Item type="Currency" name="Custom Field 2" id="id_4">0.00</Item>
<Item type="Boolean" name="Pre Tax Reduction Available" id="t">false</Item>
<Item type="Boolean" name="Conversion Privilege" id="p">false</Item>
<Item type="ItemHeader" name="Plan Setup" id="id_3"/>
<Item type="Termination" name="Benefit Termination Date" id="q">Immediate</Item>
<Item type="Determination" name="Premium Redetermination Date" id="r">Not Applicable</Item>
<Item type="Participation" name="Participation Requirement" id="s"/>
</xml>
This is what I am trying till now
这就是我到现在为止正在尝试的
DocumentBuilderFactory dbc = DocumentBuilderFactory.newInstance();
DocumentBuilder dbuilder;
try {
dbuilder = dbc.newDocumentBuilder();
Document doc = dbuilder.parse(new InputSource(new StringReader(plan.getProvisions())));
NodeList nl = doc.getElementsByTagName("Item");
for(int i = 0 ; i < nl.getLength(); i++){
if(i == row){
Element e = (Element)nl.item(i);
description = e.getAttribute("name");
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
采纳答案by yogsma
I think I got it. I have to use org.w3c.dom.Element
explicitly. I had a different Element field too.
我想我明白了。我必须org.w3c.dom.Element
明确使用。我也有一个不同的 Element 字段。
回答by bdoughan
How about:
怎么样:
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class Demo {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(new File("input.xml"));
NodeList nodeList = document.getElementsByTagName("Item");
for(int x=0,size= nodeList.getLength(); x<size; x++) {
System.out.println(nodeList.item(x).getAttributes().getNamedItem("name").getNodeValue());
}
}
}
回答by vtd-xml-author
Below is the code to do it in vtd-xml. It basically queries the XML with the XPath of "/xml/item/@name."
以下是在vtd-xml 中执行此操作的代码。它基本上使用“/xml/item/@name”的XPath 查询XML。
import com.ximpleware.*;
public class getAttrs{
public static void main(String[] s) throws VTDException{
VTDGen vg = new VTDGen();
if (!vg.parseFile("input.xml",false)) // turn off namespace
return;
VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("/xml/item/@name");
int i=0;
while( (i=ap.evalXPath())!=-1){
System.out.println(" item name is ===>"+vn.toString(i+1));
}
}
}