¿如何替换和插入新节点?

¿How replace and insert new node?

嗯,我在一个 jar 文件中执行了这个 xml 文件,我想添加一个新字段并更新另一个字段,当添加一个新字段正确但没有任何内容被压平时,问题就出现了更新数据时,我不停地收到错误字段,

这里是代码 xml:

<?xml version="1.0"?>

<?xml-stylesheet type ="text/xsl" href = "ejercicio2parte1.xslt"?>
<musica>
    <cd>
        <titulo_del_album>Los magroños</titulo_del_album>
        <artista>Julian</artista>
            <cancion>
                <nombre>El cairo</nombre>
                <duracion>4.50s</duracion>
            </cancion>
        <sello_discografico>sony BGM</sello_discografico>
        <anyo_de_publicacion>1996</anyo_de_publicacion>
    </cd>
    <cd>
        <titulo_del_album>Scarecrow</titulo_del_album>
        <artista>Avantasia</artista>
            <cancion>
                <nombre>Scarecrow</nombre>
                <duracion>7.11</duracion>
            </cancion>
        <sello_discografico>sony BGM</sello_discografico>
        <anyo_de_publicacion>1999</anyo_de_publicacion>
    </cd>
    <cd>
        <titulo_del_album>Chichos</titulo_del_album>
        <artista>Jacobo</artista>
            <cancion>
                <nombre>El rapido</nombre>
                <duracion>1.50</duracion>
            </cancion>
        <sello_discografico>El oro</sello_discografico>
        <anyo_de_publicacion>1995</anyo_de_publicacion>
    </cd>
    <cd>
        <titulo_del_album>Los rocos</titulo_del_album>
        <artista>Martin</artista>
            <cancion>
                <nombre>Fulda</nombre>
                <duracion>5.00</duracion>
            </cancion>
        <sello_discografico>El oro</sello_discografico>
        <anyo_de_publicacion>2018</anyo_de_publicacion>
    </cd>
    <cd>
        <titulo_del_album>Jacobinos</titulo_del_album>
        <artista>El caucho</artista>
            <cancion>
                <nombre>French</nombre>
                <duracion>6.20</duracion>
            </cancion>
        <sello_discografico>AFM Records</sello_discografico>
        <anyo_de_publicacion>2010</anyo_de_publicacion>
    </cd>
    <cd>
        <titulo_del_album>JOJO</titulo_del_album>
        <artista>Dio</artista>
            <cancion>
                <nombre>Kono dio da</nombre>
                <duracion>1.00</duracion>
            </cancion>
        <sello_discografico>JOJO Bizarre</sello_discografico>
        <anyo_de_publicacion>2000</anyo_de_publicacion>
    </cd>
    <cd>
        <titulo_del_album>Black beast</titulo_del_album>
        <artista>Beast in Blakc</artista>
            <cancion>
                <nombre>Berserker</nombre>
                <duracion>5.49</duracion>
            </cancion>
        <sello_discografico>Nuclear Blast Records</sello_discografico>
        <anyo_de_publicacion>2009</anyo_de_publicacion>
    </cd>
    <cd>
        <titulo_del_album>K/DA</titulo_del_album>
        <artista>Akali</artista>
            <cancion>
                <nombre>ALL OUT</nombre>
                <duracion>5.00</duracion>
            </cancion>
        <sello_discografico>Nuclear Blast Records</sello_discografico>
        <anyo_de_publicacion>2019</anyo_de_publicacion>
    </cd>
    <cd>
        <titulo_del_album>Plentakill</titulo_del_album>
        <artista>Mordekaiser</artista>
            <cancion>
                <nombre>Thornamill</nombre>
                <duracion>4.30</duracion>
            </cancion>
        <sello_discografico>Nuclear Blast Records</sello_discografico>
        <anyo_de_publicacion>2016</anyo_de_publicacion>
    </cd>
    <cd>
        <titulo_del_album>Moonglow</titulo_del_album>
        <artista>The thunder</artista>
            <cancion>
                <nombre>Cosmic night</nombre>
                <duracion>6.00</duracion>
            </cancion>
        <sello_discografico>Nuclear Blast Records</sello_discografico>
        <anyo_de_publicacion>2004</anyo_de_publicacion>
    </cd>
    <cd>
        <titulo_del_album>Mistery of time</titulo_del_album>
        <artista>Edguy</artista>
            <cancion>
                <nombre>Deep purple</nombre>
                <duracion>5.40</duracion>
            </cancion>
        <sello_discografico>Nuclear Blast Records</sello_discografico>
        <anyo_de_publicacion>2019</anyo_de_publicacion>
    </cd>
</musica>

她是我插入的代码:

insert node
<cd>
        <titulo_del_album>dsadsaw</titulo_del_album>
        <artista>asddsasa</artista>
            <cancion>
                <nombre>asdsada</nombre>
                <duracion>7.11</duracion>
            </cancion>
        <sello_discografico>sony BGM</sello_discografico>
        <anyo_de_publicacion>1999</anyo_de_publicacion>
    </cd>


before doc("Ejercicio2.xml") //musica

还有我的更新代码:

replace value of node
//cd/artista=("Julian")/cancion/nombre
with "Gloria Fuertes"

insert 表达式中,您告诉 XQuery 引擎在 //musica 之前插入 <cd> 节点。但是,<musica> 是文档的根节点,因此在它之前插入一个节点会导致 XML 文件格式不正确。我希望引擎会抛出错误。

如果您的目标是将 <cd> 元素插入到 <musica> 元素中,您将使用以下表达式:

insert node <cd/> into doc("Ejercicio2.xml")/musica

要控制元素是作为第一个元素还是最后一个元素插入,在into关键字前添加as firstas last

对于 replace 表达式,您尝试 select <artista> 元素时出现语法错误,并且 <nombre> 元素的路径错误。

对于 select Julian <artista> 元素,使用过滤器表达式:

//cd/artista[. = "Julian"]

扩展它以找到 <nombre> 元素:

//cd[artista = "Julian"]/cancion/nombre

请注意,尽管示例 XML 文件有缩进,但 <cancion> 不是 <artista> 的子元素 - 而是其兄弟元素。