首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用Java从节点获取名为comment的属性

使用Java从节点获取名为comment的属性
EN

Stack Overflow用户
提问于 2015-01-19 13:19:04
回答 3查看 65关注 0票数 0

我需要提取这些XML注释。尤其是标准注释。我是XML解析的新手。我目前使用的是标准的Java-XML-Parser javax.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     <criteria>
    <criteria operator="OR" comment="Operation system section">
      <extend_definition comment="SUSE Linux Enterprise Server 12 is installed" definition_ref="oval:org.mitre.oval:def:28211"/>
      <extend_definition comment="SUSE Linux Enterprise Desktop 12 is installed" definition_ref="oval:org.mitre.oval:def:28148"/>
    </criteria>
    <criterion comment="update-test-security-0 is earlier than 0:11.2" test_ref="oval:org.mitre.oval:tst:136394"/>
  </criteria>

如何提取评论?

EN

回答 3

Stack Overflow用户

发布于 2015-01-19 13:31:49

要只读取名为"comment“的所有属性,我建议通过XMLBeam使用XPath。(披露:我隶属于这个项目。)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ReadAttributes {
public static void main(String[] args) {
        List<String> comments = new XBProjector().io().stream(ReadAttributes.class.getResourceAsStream("data.xml")).evalXPath("//@comment").asListOf(String.class);
        System.out.println(comments);
        }
}

此程序打印输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Operation system section, SUSE Linux Enterprise Server 12 is installed, SUSE Linux Enterprise Desktop 12 is installed, update-test-security-0 is earlier than 0:11.2]
票数 0
EN

Stack Overflow用户

发布于 2015-01-19 13:34:14

如果您不需要将整个XML数据作为java对象,而只需要criterion属性,则可以使用XPath获取该属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
XPath xpath = XPathFactory.newInstance().newXPath();
return xpath.evaluate("/criteria/criterion/@comment", document);

如果您将XML放在字符串中,但不知道如何将其解析为文档,请看一下:How to convert XML (String) to a valid document?

票数 0
EN

Stack Overflow用户

发布于 2015-01-19 13:57:27

您还可以使用JDK的简单XPath特性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String[] args = new String[]{ "//*[@comment]" };
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
for( String s: args ){
    XPathExpression xpExp = xpath.compile( "count("+s+")" );
    String res = xpExp.evaluate( source );
    System.out.println( s + ": " + res );
    int n = Integer.parseInt( res );
    for( int i = 1; i <= n; i++ ){
        xpExp = xpath.compile( "(" + s + ")[" + i + "]/@comment" );
        System.out.println(  "comment: " + xpExp.evaluate( source ) );
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28025560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文