如何提取connection.username并替换为XML文件

时间:2019-06-17 22:54:26

标签: xml powershell xpath

我有一个XML文件可以使用PowerShell进行编辑。

<?xml version="1.0" encoding="UTF-8"?>
<InitFile version="1.0">
    <SecureReadOnlyFields value="true"/>
    <file-browser>
        <allow-upload value="true"/>
        <root url="D:\Temp\"/>
        <folder url="pa_wf"/>
        <folder url="fsa"/>
        <folder url="CG"/>
    </file-browser>
    <HibernateConfigurations>
        <HibernateDefaultSecurityKey value="ATF"/>
        <HibernateConfiguration name="USER_AUT_FRA_WFSE">
            <session-factory>
                <property name="connection.driver_class">xxxxxx</property>
                <property name="connection.url">xxxxx</property>
                <property name="connection.username">USER_AUT</property>
            </session-factory>

读取XML文件的代码:

$inixml = (Get-Content -Path D:\init.xml)
$upinit = $inixml | ConvertTo-Xml
$node = $upinit.SelectNodes("//property")

代码的最后一行没有给出任何O / P。使用PowerShell和USER_AUT_PAR而不是USER_AUT来编辑包含“ connection.username”的行。

2 个答案:

答案 0 :(得分:0)

您应该可以执行以下操作: [xml]$x = get-content 'C:\Program Files\Common Files\microsoft shared\ink\Alphabet.xml'

然后可以通过...访问xml文件中的每个项目

$x.alphabetFile

xmlns                                          xsi                                       schemaLocation                                              trainer            
-----                                          ---                                       --------------                                              -------            
urn:schemas-microsoft-com:tabletpc:alphabet.v1 http://www.w3.org/2001/XMLSchema-instance urn:schemas-microsoft-com:tabletpc:alphabet.v1 Alphabet.xsd {trainer, traine...

等等等

答案 1 :(得分:0)

ConvertTo-Xml并没有按照您认为的做。如果您实际看一下转换结果,将会看到以下内容:

PS C:\> $inixml.Save([Console]::Out)
<?xml version="1.0" encoding="ibm850"?>
<Objects>
  <Object Type="System.String">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</Object>
  <Object Type="System.String">&lt;InitFile version="1.0"&gt;</Object>
  <Object Type="System.String">    &lt;SecureReadOnlyFields value="true"/&gt;</Object>
  <Object Type="System.String">    &lt;file-browser&gt;</Object>
  <Object Type="System.String">        &lt;allow-upload value="true"/&gt;</Object>
  <Object Type="System.String">        &lt;root url="D:\Temp\"/&gt;</Object>
  <Object Type="System.String">        &lt;folder url="pa_wf"/&gt;</Object>
  <Object Type="System.String">        &lt;folder url="fsa"/&gt;&
...

来自documentation

  

说明

     

ConvertTo-Xml cmdlet 创建一个或多个Microsoft .NET Framework对象的基于XML的表示形式 。要使用此cmdlet,请将一个或多个对象通过管道传递到cmdlet,或使用InputObject参数指定对象。

强调我的。

要正确加载XML数据,请使用以下方法:

$inixml = New-Object Xml
$inixml.Load('D:\init.xml')

然后,您将可以按预期选择<property>节点:

PS C:\> $inixml.SelectNodes('//property')

name                    #text
----                    -----
connection.driver_class xxxxxx
connection.url          xxxxx
connection.username     USER_AUT