Powershell xpath - получить значения двух атрибутов - PullRequest
1 голос
/ 05 мая 2020

Я пытаюсь получить значения следующих двух атрибутов <ATTRIBUTE name="exportPath"> и <ATTRIBUTE name="r_creation_date">

Но я могу получить только одно значение или другое, а не оба ...:

   [xml]$xml = Get-Content "$AttributesFile"
   $Xml | Select-Xml -XPath "//ATTRIBUTE[@name='r_creation_date']" | foreach {$_.node.InnerXML}

<![CDATA[4/7/2016 6:18:42 PM]]>
<![CDATA[4/9/2016 6:18:42 PM]]>

Как мне получить вместо этого следующий результат?

<![CDATA[D:\test\overview_1.0.doc]]>
<![CDATA[4/7/2016 6:18:42 PM]]>
<![CDATA[D:\test\Letter.docx]]>
<![CDATA[4/9/2016 6:18:42 PM]]>

Вот XML, который я использую:

<EXTRACT path="D:\test\">
  <DOCBASE name="xdocs" />
  <VERSION>
    <DOCUMENT name="overview.doc" chronicle_id="09028bf4807d6da5" objectId="09028bf4807d6da5" implicitVersionLabel="1.0">
      <ATTRIBUTE name="docbasePath"></ATTRIBUTE>
      <ATTRIBUTE name="exportPath"><![CDATA[D:\test\overview_1.0.doc]]></ATTRIBUTE>
      <ATTRIBUTE name="r_creation_date"><![CDATA[4/7/2016 6:18:42 PM]]></ATTRIBUTE>
      <ATTRIBUTE name="edo_creation_date"><![CDATA[nulldate]]></ATTRIBUTE>
      <ATTRIBUTE name="edo_import_date"><![CDATA[nulldate]]></ATTRIBUTE>
    </DOCUMENT>
  </VERSION>
  <VERSION>
    <DOCUMENT name="Letter.docx" chronicle_id="09028bf4807e65c5" objectId="09028bf4807e65c5" implicitVersionLabel="1.0">
      <ATTRIBUTE name="docbasePath"></ATTRIBUTE>
      <ATTRIBUTE name="exportPath"><![CDATA[D:\test\Letter.docx]]></ATTRIBUTE>
      <ATTRIBUTE name="r_creation_date"><![CDATA[4/9/2016 6:18:42 PM]]></ATTRIBUTE>
      <ATTRIBUTE name="edo_creation_date"><![CDATA[nulldate]]></ATTRIBUTE>
      <ATTRIBUTE name="edo_import_date"><![CDATA[nulldate]]></ATTRIBUTE>
    </DOCUMENT>
  </VERSION>
</EXTRACT>

Ответы [ 2 ]

3 голосов
/ 05 мая 2020

Попробуйте изменить выражение xpath на

//ATTRIBUTE[@name='r_creation_date' or @name='exportPath']
1 голос
/ 05 мая 2020

Может быть что-то вроде

$xml | Select-Xml -XPath "//ATTRIBUTE[@name='r_creation_date']" |
    ForEach-Object {
        $_.Node.PreviousSibling.InnerXml
        $_.node.InnerXML
    }

(работает для данного XML)

...