3

以下のような XML があります。

<As>
<a>
    <Bs>
        <b>5</b>
    <Bs>
</a>
<a>
    <Bs>
        <b>9</b>
    <Bs>
</a>
<a></a>
<a>
    <Bs>
        <b>12</b>
        <b>14</b>
        <b>15</b>
    </Bs>
</a>

ノードで選択した行を削除したいと思います。ユーザーが node を選択したとします<b>14</b>

私は式を次のように生成しました:

String expression  =  "/As/a[4]/Bs/b[2]";
Node node = (Node) xpath.evaluate(expression, doc, XPathConstants.NODE);
node.getParentNode().removeChild(node);

次の例外を与えています:

javax.xml.transform.TransformerException: Extra illegal tokens: 'health-history-questions', '/', 'health-history-question', '[', '3', ']'
at org.apache.xpath.compiler.XPathParser.error(XPathParser.java:610)
at org.apache.xpath.compiler.XPathParser.initXPath(XPathParser.java:145)
at org.apache.xpath.XPath.<init>(XPath.java:178)
at org.apache.xpath.XPath.<init>(XPath.java:266)
at org.apache.xpath.jaxp.XPathImpl.eval(XPathImpl.java:195)
at org.apache.xpath.jaxp.XPathImpl.evaluate(XPathImpl.java:281)
4

2 に答える 2

1

申し訳ありませんが、みんなの問題は..式のフォームに「/」がありません。だから私の間違い。申し訳ありません。

于 2011-11-29T07:04:25.010 に答える
0

なぜこのような複雑な XPath を使用するのでしょうか。これを試してみてください

String expression = "//b[.=14]";

または、正しい階層を確認する必要がある場合は、次のようにします。

String expression = "/As/a/Bs/b[.=14]";
于 2011-11-24T15:03:29.600 に答える