Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中解析xml标记中引号中的值?_Java_Xml_Dom - Fatal编程技术网

如何在Java中解析xml标记中引号中的值?

如何在Java中解析xml标记中引号中的值?,java,xml,dom,Java,Xml,Dom,假设我有一个xml标记,如: <test val="val1 ">Test XML</test> 每当文件中出现标记时,我想解析值val1,以便将其保存到数组中。您可以从文件中加载XML,并选择标记名为test的所有元素,然后从中提取属性值 基本上: doc.getElementsByTagNametest以选择所有测试元素,对于找到的每个元素,您可以使用node.getAttributes.getNamedItemval选择其名为val的属性,如果不是null,则仅使

假设我有一个xml标记,如:

<test val="val1 ">Test XML</test>

每当文件中出现标记时,我想解析值val1,以便将其保存到数组中。

您可以从文件中加载XML,并选择标记名为test的所有元素,然后从中提取属性值

基本上:

doc.getElementsByTagNametest以选择所有测试元素,对于找到的每个元素,您可以使用node.getAttributes.getNamedItemval选择其名为val的属性,如果不是null,则仅使用getTextContent获取其文本内容

示例代码可能类似于:

// temporary result list just to store the values found
ArrayList<String> result = new ArrayList<String>();

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document doc = documentBuilder.parse(new ByteArrayInputStream("<document><test val=\"val1\">Test XML</test><test val=\"val2\">Test XML</test><test val=\"val3\">Test XML</test></document>".getBytes()));
// you could use something like: documentBuilder.parse(new FileInputStream("fileName.ext")); instead

// get test nodes and iterate over it checking test attribute
NodeList elements = doc.getElementsByTagName("test");
for (int i = 0; i < elements.getLength(); i++) {
    Node node = elements.item(i);
    Node attribute = node.getAttributes().getNamedItem("val");
    if (attribute != null) {
        result.add(attribute.getTextContent());
    }
}

// get result values in a string array (if collection is preferred use result instead)
String[] array = result.toArray(new String[] {});

// just print it in a readable format
System.out.println(Arrays.toString(array));

步骤1:选择一个XML库。我建议使用支持XPath/XQuery的。。因此,关键词是:java库xml xpath是一个很好的解析库您的问题被标记为dom。那么,您想使用dom吗?你读过它的javadoc吗?你还不明白其中的什么?好的,所以getattributes.getNamedItem是必要的。是的,这将获取所有的属性,并且从这个案例中的一个名为val的属性中是的,这正是我想要弄清楚的。现在我只想知道库是否会使解析文件变得更容易,或者通常的dom模型可以完成这项工作?就内存考虑而言,如果我解析一个大值,那么你可以使用很多图书馆,我个人非常喜欢的一个是它非常直观,特别是当你已经使用了DOMFair足够的时候,它非常容易学习。谢谢你的回答。
[val1, val2, val3]