npm 在现有标记中插入xml标记节点作为子标记

xcitsw88  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(138)

在初始化服务中,我使用xml-writer节点包创建了一个空xml,如下所示

createEmptyXML(xw: any) {
    xw.startDocument()
    xw.startElement('Hello').writeAttribute('name', '_nameOfThePerson')
}

从而产生了这样的东西

<?xml version="1.0"?>
<Hello name="_nameOfThePerson"/>

我想写一个函数,可以添加子标签到Hello标签。类似于以下内容

<?xml version="1.0"?>
  <Hello name="_nameOfThePerson"/>
    <childTag name="A"/> 
    <childTag name="B"/>
  </Hello>

我的方法是将初始编写器保存在一个存储中,并将其传递给一个方法,然后使用它添加元素,如下所示

writeXML(xw: any): void {
    xw.startElement('childTag').writeAttribute('name', 'A')
}

在第一次尝试中,它按照预期正确地工作。它在我的Hello标签中添加子标签。

<?xml version="1.0"?>
  <Hello name="_nameOfThePerson"/>
    <childTag name="A"/> 
  </Hello>

但是当我再次使用那个方法时,它给出了这样的结果

<?xml version="1.0"?>
  <Hello name="_nameOfThePerson"/>
    <childTag name="A"/> 
  </Hello>
  <childTag name="B"/>

如何在第一个标签之后添加第二个子标签,而不是在Hello标签之后。

pgky5nke

pgky5nke1#

尝试将parent/hello标记分配给变量,该变量将被存储/传递给方法:

const parent = xw.startElement('Hello').writeAttribute('name', '_nameOfThePerson');

然后再后来:

parent.startElement('childTag').writeAttribute('name', 'A').endElement();

尝试以下代码,它应该会产生所需的输出,然后您可以根据您的代码设计模式进行调整:

const xw = new XMLWriter();

xw.startDocument();

const parent = xw.startElement('Hello').writeAttribute('name', '_nameOfThePerson');

parent.startElement('childTag').writeAttribute('name', 'A').endElement();

parent.startElement('childTag').writeAttribute('name', 'b').endElement();

因此,请确保您传递/写入到父对象,而不是文档示例。例如:

parent!: any;

createParent(xw: any) {
    xw.startDocument();
    // now store parent somewhere
    // and pass/write it instead of the document instance
    const parent = xw.startElement('Hello').writeAttribute('name', '_nameOfThePerson')

    this.parent = parent;
}

// write to/send parent, instead of xw
writeChild(parent: any): void {
    // or this.parent...
    parent.startElement('childTag').writeAttribute('name', 'A').endElement();
}

相关问题