0

XML ドキュメント内の特定の要素の属性を変更したいと考えています。最も簡単な方法は何ですか?(Xquery が一番か、Python なら何とか扱えます)

/root/person[1]/@nameに変更する"Jim"
_/root/person[2]/@name"John"

サンプル.xml

<root>
    <person name="brian">
    <number>1</number>
    <school>Y</school>
    <age>18</age>
    </person>
    <person name="brian">
    <number>1</number>
    <school>Y</school>
    <age>18</age>
    </person>
</root>

サンプル結果.xml

<root>
    <person name="Jim">
    <number>1</number>
    <school>Y</school>
    <age>18</age>
    </person>
    <person name="John">
    <number>1</number>
    <school>Y</school>
    <age>18</age>
    </person>
</root>
4

3 に答える 3

1

実装がサポートしている場合は、XQuery Updateを試してください。

replace value of node /root/person[1]/@name with "Jim",
replace value of node /root/person[2]/@name with "John"
于 2012-08-28T10:26:22.200 に答える
1

XML ドキュメントへの小さな変更は、XSLT で最も簡単に実現できます。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <!-- By default, copy elements and attributes unchanged -->
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node() | @*"/>
    </xsl:copy>
  </xsl:template>

  <!-- Change /root/person[1]/@name to "Jim" -->
  <xsl:template match="/root/person[1]/@name">
    <xsl:attribute name="name">Jim</xsl:attribute>
  </xsl:template>

  <!-- Change /root/person[2]/@name to "John" -->
  <xsl:template match="/root/person[2]/@name">
    <xsl:attribute name="name">John</xsl:attribute>
  </xsl:template>

</xsl:stylesheet>
于 2012-08-28T08:41:38.037 に答える
0

うーん、それを再構築して FLOWR に変更を加えるだけでよいでしょうか。-->

element root {
    for $person at $i in doc('Sample.xml')/root/person
    let $new-name := if($i eq 1) then "Jim" else "John"
    return 
        element person {
            attribute name { $new-name },
            $person/*
        }
}
于 2012-08-28T07:25:51.493 に答える