0

次のような XML ファイルがあります。

<?xml version="1.0" encoding="UTF-8"?>
<Site>
  <Name>MySite</Name>
  <Groups>
      <Default></Default>
      <GroupA></GroupA>
  </Groups>
</Site>

グループの子要素 ​​(この例では「Default」と「GroupA」) のすべての名前を文字列のリストとして取得したいと考えています。私は次のことを試していました。

public List<String> getGroupNames() {
    List<String> names = new ArrayList<String>();

    XPathExpression<Text> xpath = XPathFactory.instance().compile(
            "/Site/Groups/*/name()", Filters.text());

    List<Text> elements = xpath.evaluate(document);

    if (elements.size() > 0) {
        for (Text text : elements) {
            names.add(text.getText());
        }
        return names;
    }
    return null;
}

これは、次の例外で失敗します。

class org.jaxen.saxpath.XPathSyntaxException: /Site/Groups/*/name(): 20: Expected node-type

そのための適切な構文は何ですか? 例外がわかりません。

4

1 に答える 1

0

使用する XPathFactory インスタンスは XPath 1 のみをサポートしているようです。

xpath 2 を使用する前に、XPath 2 をサポートするライブラリをロードする必要があります。例: SAXON の場合:

import net.sf.saxon.om.NamespaceConstant;  


String objectModel = NamespaceConstant.OBJECT_MODEL_SAXON;  
System.setProperty("javax.xml.xpath.XPathFactory:"+objectModel, "net.sf.saxon.xpath.XPathFactoryImpl");  
于 2013-06-14T16:28:37.770 に答える