Как получить поддерево выражения Xpath? - PullRequest
0 голосов
/ 25 августа 2011

Если, скажем, у меня есть следующий XML-файл:

<title text=“title1">
    <comment id=“comment1">
        <data> this is part of comment one</data>
        <data> this is some more of comment one</data>
    </comment>
    <comment id=“comment2”>
        <data> this is part of comment two</data>
        <data> this is some more of comment two</data>
        <data> this is even some more of comment two</data>
    </comment>
</title>

И мне задают следующий запрос XPath:

/title/comment/@id

Какой наилучший способ получитьподдерево, к которому принадлежит выражение.

Так, например, вышеприведенное выражение вернет:

  • id="comment1"
  • id="comment2"

К чему, comment1 принадлежит поддереву:

    <comment id="comment1">
        <data> this is part of comment one</data>
        <data> this is some more of comment one</data>
    </comment>

И, comment2 принадлежит поддереву:

    <comment id=“comment2">
        <data> this is part of comment two</data>
        <data> this is some more of comment two</data>
        <data> this is even some more of comment two</data>
    </comment>

Причина, по которой я хочу это сделать, заключается в том, что я могу рекурсивно сделать вызов на подпрограмме-дерево, в котором разрешено выражение Xpath.

Я кодирую это на Java с использованием DOM.

Ответы [ 3 ]

1 голос
/ 25 августа 2011

Похоже, что выражение XPath неизвестно до времени выполнения.И вы хотите получить родителя каждого узла, выбранного выражением XPath ... это правильно?Элемент <comment> является родителем каждого атрибута comment/@id.Получение элемента <comment> эквивалентно получению его поддерева (потомков), поскольку вы можете извлечь его потомков, используя дополнительные выражения XPath или функции DOM, или вы можете скопировать элемент <comment> с его потомками.

Один из способов ответить на ваш вопрос - просто добавить "/ .." в конец выражения XPath.Например,

"/title/comment/@id"

станет

"/title/comment/@id/.."

, что эквивалентно ответу @ Dan, но может быть легко получено из любого выражения XPath.

1 голос
/ 25 августа 2011

Выражение XPath возвращает узлы, в вашем случае атрибуты узлов.Вызывающий код Java может делать с этими узлами все, что ему нравится, например, переходить к своим родителям или к потомкам их родителей.

Но вместо того, чтобы выполнять половину работы в XPath и половину в Java, почему бы не сделатьвсе это в XSLT или XQuery?

1 голос
/ 25 августа 2011
/title/comment[@id]

Получит все элементы комментария с атрибутом id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...