Как заменить значения широты и долготы на одно значение элемента? - PullRequest
0 голосов
/ 15 мая 2018

XML-файл выглядит так Как этого добиться? вам нужно заменить значения широты и долготы на одно значение элемента.

Например: Существующий один

<Longitude>-0.30365</Longitude>
<Latitude>51.61965</Latitude>

Новый: <cordinate-point>-0.30365,51.619165<cordinate-point>

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Вы можете преобразовать документ с помощью XSLT, используя xdmp:xslt-eval() с локально оцененной таблицей стилей или xdmp:xslt-invoke() с установленным XSLT, а затем заменить существующий документ с результатомпреобразования с использованием xdmp:node-replace():

declare variable $XSLT := 
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="2.0">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="@*|node()">
      <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
    </xsl:template>
    <!--replace the Latitude element with a cordinate-point element -->
    <xsl:template match="Latitude">
        <cordinate-point>
            <xsl:value-of select="., ../Longitude" separator=","/>
        </cordinate-point>
    </xsl:template>

    <!--drop the Longitude element -->
    <xsl:template match="Longitude"/>

</xsl:stylesheet>;

let $doc := fn:doc("/uri/to/your/doc.xml")
return
    xdmp:node-replace($doc, xdmp:xslt-eval($XSLT, $doc))
0 голосов
/ 16 мая 2018

Вы можете использовать функции xdmp:node-insert-before() и xdmp:node-delete():

let $doc :- fn:doc("/uri/of/your/doc.xml")
let $long := $doc/root/Longitude
let $lat := $doc/root/Latitude
(: construct an element with text() value of the Longitude and Latitude elements :)
let $point := <cordinate-point>{string-join(($lat,$long), ",")}</cordinate-point>
return
  (
    (: insert a new coordinate-point element before the Longitude element :)
    xdmp:node-insert-before($long, $point),
    (: Remove the Longitude element :)
    xdmp:node-delete($long),
    (: Remove the Latitude element :)
    xdmp:node-delete($lat)
  )
...