如何从具有节点的函数中返回XML文件?

问题描述

我有一个简单的XML

<bds>
<bd>
    <id>10</id>
    <user>john</user>
    <servers>
        <name>pc24</name> 
    </servers>
</bd>
<bd>
    <id>12</id>
    <user>peter</user>
    <servers>
        <name>pc25</name> 
    </servers>
</bd>

我有一个函数,我希望它返回一个XML文件,其中包含从节点挂起的所有元素。

$collection = "bds"
$attribute = "name"
$obj = "pc25"


function test () {

    if ($xml.SelectNodes("//$attribute").name -eq "name") {
    

        return $xml.SelectNodes("//$attribute").parentnode | Where $attribute -eq $obj
    
    }

    else {
    
        return $false

    }
}

我希望函数输出为:

        <id>12</id>
        <user>peter</user>
        <servers>
            <name>pc25</name> 
        </servers>

如何在函数返回的情况下生成XML文件

解决方法

您可以使用稍微更聪明的XPath来选择节点,然后使用InnerXml属性来获取所需的输出字符串:

PS> $xml = [xml] @"
<bds>
  <bd>
    <id>10</id>
    <user>john</user>
    <servers>
      <name>pc24</name>
    </servers>
  </bd>
  <bd>
    <id>12</id>
    <user>peter</user>
    <servers>
      <name>pc25</name>
    </servers>
  </bd>
</bds>
"@

PS> $xml.SelectNodes("bds/bd[servers/name = 'pc25']").InnerXml
<id>12</id><user>peter</user><servers><name>pc25</name></servers>

注意-bds/bd[servers/name = 'pc25']的意思是“找到所有具有值bds/bd的子servers/name节点的pc25个节点”。

然后您可以根据需要使用XPath字符串中的变量值将其重新安装到函数中。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...