0

我的 XML 如下:-

<myxml>
    <resource name='book'>
        <acl>
            <ace person='bob' rights='rw' />
            <ace person='john' rights='w' />
        </acl>
    </resource>

    <resource name='dvd'>
        <acl>
            <ace person='bob' rights='w' />
        </acl>
    </resource>
</myxml>

我无法阅读此 XML 文档。

这是我尝试过的代码。

    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
                .newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory
                .newDocumentBuilder();
        Document document = documentBuilder.parse(new File(fileName));

    Element rootElement = xmlDocument.getDocumentElement();

    NodeList resourceList= rootElement.getElementsByTagName("resource");
    for (int i = 0; i < resourceList.getLength(); i++) {
        Node node = resourceList.item(i);
        Element element = (Element) node;
        String resourceName= element.getAttribute("name");
    }

基本上我想打印像“这本书可以由这个人在 xyz 许可下使用”。

我可以通过 获得书名String objectName= element.getAttribute("name")。在这之后我不能去。

我尝试获取子节点,但继续获取空值。

有什么建议么?

4

2 回答 2

0

您只需要for嵌套在其中的另一个循环来处理<ace>元素。

NodeList resourceList = rootElement.getElementsByTagName("resource");
for (int i = 0; i < resourceList.getLength(); i++) {
    Element resource = (Element) resourceList.item(i);
    String book = resource.getAttribute("name");
    NodeList aceList = resource.getElementsByTagName("ace");
    for (int j = 0; j < aceList.getLength(); j++) {
        Element ace = (Element) aceList.item(j);
        System.out.println("'" + book + "' can be used by '"
                + ace.getAttribute("person") + "' with '"
                + ace.getAttribute("rights") + "' permission.");
    }
}

输出

'book' can be used by 'bob' with 'rw' permission.
'book' can be used by 'john' with 'w' permission.
'dvd' can be used by 'bob' with 'w' permission.
于 2013-08-12T04:09:34.857 回答
0

一种选择是使用 element.getElementsByTagName("ace") 来检索您要查找的 ace 元素:

    NodeList aceList = element.getElementsByTagName("ace");
    for(int j= 0; j < aceList.getLength(); j++){
        Element ace = (Element) aceList.item(j);
        String person = ace.getAttribute("person");
    }
于 2013-08-12T03:38:47.520 回答