Как получить значение из значения Key внутри вложенного элемента XML - PullRequest
0 голосов
/ 23 мая 2019

Пожалуйста, просмотрите мой XML

    <?xml version="1.0" encoding="utf-8"?><d:query xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" m:type="Microsoft.Office.Server.Search.REST.SearchResult">
    <d:ElapsedTime m:type="Edm.Int32">39</d:ElapsedTime>
    <d:PrimaryQueryResult m:type="Microsoft.Office.Server.Search.REST.QueryResult">
    <d:CustomResults m:type="Collection(Microsoft.Office.Server.Search.REST.CustomResult)"/>
    <d:QueryId>aae2457e-d42a-4d71-a18c-fbd72ab09f11</d:QueryId>
    <d:QueryRuleId m:type="Edm.Guid">00000000-0000-0000-0000-000000000000</d:QueryRuleId>
    <d:RefinementResults m:null="true"/>
    <d:RelevantResults m:type="Microsoft.Office.Server.Search.REST.RelevantResults">
    <d:GroupTemplateId m:null="true"/>
    <d:ItemTemplateId m:null="true"/>
    <d:Properties m:type="Collection(SP.KeyValue)">...</d:Properties>
    <d:ResultTitle m:null="true"/>
    <d:ResultTitleUrl m:null="true"/>
    <d:RowCount m:type="Edm.Int32">1</d:RowCount>
    <d:Table m:type="SP.SimpleDataTable">
    <d:Rows>
    <d:element m:type="SP.SimpleDataRow">
    <d:Cells>
    <d:element m:type="SP.KeyValue">
    <d:Key>Rank</d:Key>
    <d:Value>6.4468879699707</d:Value>
    <d:ValueType>Edm.Double</d:ValueType>
    </d:element>
    <d:element m:type="SP.KeyValue">
    <d:Key>AccountName</d:Key>
    <d:Value>domain\tverma</d:Value>
    <d:ValueType>Edm.String</d:ValueType>
    </d:element>
    </d:Cells>
    </d:element>
    </d:Rows>
    </d:Table>
    <d:TotalRows m:type="Edm.Int32">1</d:TotalRows>
    <d:TotalRowsIncludingDuplicates m:type="Edm.Int32">1</d:TotalRowsIncludingDuplicates>
    </d:RelevantResults>
    <d:SpecialTermResults m:null="true"/>
    </d:PrimaryQueryResult>
    <d:SecondaryQueryResults m:type="Collection(Microsoft.Office.Server.Search.REST.QueryResult)"/>
    <d:SpellingSuggestion m:null="true"/>
    <d:TriggeredRules m:type="Collection(Edm.Guid)"/>
    </d:query>

из этого XML я хочу получить значение "Account Name", для которого я создал свой xpath, но он не работает:

d:query/d:PrimaryQueryResult/d:RelevantResults/d:Table/d:Rows/d:element/d:Cells/d:element[d:Key='AccountName')]/d:Value

Каким будет правильный xpath для этого?

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Другой вариант:

//d:Key[text()='AccountName']/following::d:Value/text()
0 голосов
/ 23 мая 2019

Абсолютный:

/d:query/d:PrimaryQueryResult/d:RelevantResults/d:Table/d:Rows/d:element/d:Cells/d:element[./d:Key/text() = 'AccountName']/d:Value/text()

Быстрый и грязный:

//d:element[./d:Key/text() = 'AccountName']/d:Value/text()

XML с отступом для справки будущего читателя:

<?xml version="1.0" encoding="utf-8"?>
<d:query xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" m:type="Microsoft.Office.Server.Search.REST.SearchResult">
<d:ElapsedTime m:type="Edm.Int32">39</d:ElapsedTime>
<d:PrimaryQueryResult m:type="Microsoft.Office.Server.Search.REST.QueryResult">
  <d:CustomResults m:type="Collection(Microsoft.Office.Server.Search.REST.CustomResult)"/>
  <d:QueryId>aae2457e-d42a-4d71-a18c-fbd72ab09f11</d:QueryId>
  <d:QueryRuleId m:type="Edm.Guid">00000000-0000-0000-0000-000000000000</d:QueryRuleId>
  <d:RefinementResults m:null="true"/>
  <d:RelevantResults m:type="Microsoft.Office.Server.Search.REST.RelevantResults">
    <d:GroupTemplateId m:null="true"/>
    <d:ItemTemplateId m:null="true"/>
    <d:Properties m:type="Collection(SP.KeyValue)">...</d:Properties>
    <d:ResultTitle m:null="true"/>
    <d:ResultTitleUrl m:null="true"/>
    <d:RowCount m:type="Edm.Int32">1</d:RowCount>
    <d:Table m:type="SP.SimpleDataTable">
      <d:Rows>
        <d:element m:type="SP.SimpleDataRow">
          <d:Cells>
            <d:element m:type="SP.KeyValue">
              <d:Key>Rank</d:Key>
              <d:Value>6.4468879699707</d:Value>
              <d:ValueType>Edm.Double</d:ValueType>
            </d:element>
            <d:element m:type="SP.KeyValue">
              <d:Key>AccountName</d:Key>
              <d:Value>domain\tverma</d:Value>
              <d:ValueType>Edm.String</d:ValueType>
            </d:element>
          </d:Cells>
        </d:element>
      </d:Rows>
    </d:Table>
    <d:TotalRows m:type="Edm.Int32">1</d:TotalRows>
    <d:TotalRowsIncludingDuplicates m:type="Edm.Int32">1</d:TotalRowsIncludingDuplicates>
  </d:RelevantResults>
  <d:SpecialTermResults m:null="true"/>
</d:PrimaryQueryResult>
<d:SecondaryQueryResults m:type="Collection(Microsoft.Office.Server.Search.REST.QueryResult)"/>
<d:SpellingSuggestion m:null="true"/>
<d:TriggeredRules m:type="Collection(Edm.Guid)"/>
</d:query>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...