Выражение XPath возвращает узел; то, что вы делаете с узлом, зависит от кода вызывающего приложения. Если вы вызовете node.getStringValue()
, вы получите строковое значение, как определено в спецификации XPath c (то есть, так же, как вызов fn:string()
на узле в XPath). Точно так же метод atomize()
следует XPath spe c для атомизации (эквивалентно fn:data()
, примененному к узлу.)
Если вы хотите, чтобы узел сериализовался как лексический XML, есть различные способы достижения этого. Если бы вы использовали интерфейс S9oni Saxon вместо интерфейса JAXP, я бы порекомендовал XdmNode.toString()
. Использование интерфейса JAXP, а затем приведение к внутренним классам Saxon дает вам худшее из обоих миров: вы получаете все проблемы JAXP (например, слабая типизация, отсутствие поддержки XPath 2.0) без каких-либо преимуществ (переносимость между реализациями). Но если вы предпочитаете делать это таким образом, то самым простым способом сериализации саксонских узлов, вероятно, является метод *1006* stati c. Версия метода с тремя аргументами дает вам полный контроль над свойствами сериализации, такими как отступ и добавление объявления XML.
В XPath 3.1 вы также можете вызывать сериализацию внутри самого выражения XPath, вызывая fn:serialize()
; это позволило бы избежать использования любых классов и методов Saxon c в коде Java.