Преобразование XML с отсутствующими значениями элемента в широкий формат CSV через XSLT - PullRequest
0 голосов
/ 15 апреля 2020

Как бы вы эффективно преобразовали этот XML документ

<?xml version="1.0" encoding="UTF-8" ?>
<Document>
  <Person>
    <Entry>
      <Name>Height</Name>
      <Value>172</Value>
    </Entry>
    <Entry>
      <Name>Weight</Name>
      <Value>73</Value>
    </Entry>
  </Person>
  <Person>
    <Entry>
      <Name>Height</Name>
      <Value>180</Value>
    </Entry>
    <Entry>
      <Name>Weight</Name>
      <Value>70</Value>
    </Entry>
    <Entry>
      <Name>Age</Name>
      <Value>30</Value>
    </Entry>    
  </Person>
  <Person>
    <Entry>
      <Name>Height</Name>
      <Value>176</Value>
    </Entry>
    <Entry>
      <Name>Age</Name>
      <Value>25</Value>
    </Entry>    
  </Person>  
</Document>  

в этот файл CSV?

"Height","Weight","Age"
"172","73",""
"180","70","30"
"176","","25"

Он отличается от этого вопроса , в котором Отсутствие (или вариация) в элементах, а не в значениях элементов.

1 Ответ

1 голос
/ 15 апреля 2020

Как насчет:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />

<xsl:template match="/Document">
    <xsl:text>"Height","Weight","Age"&#10;</xsl:text>  
    <xsl:for-each select="Person">
        <xsl:text>"</xsl:text>
        <xsl:value-of select="Entry[Name='Height']/Value"/>
        <xsl:text>","</xsl:text>
        <xsl:value-of select="Entry[Name='Weight']/Value"/>
        <xsl:text>","</xsl:text>
        <xsl:value-of select="Entry[Name='Age']/Value"/>
        <xsl:text>"&#10;</xsl:text>  
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...