2015-02-09 4 views
-1
<document> 
    <body> 
     <p> 
      <pPr> 
       <autoSpaceDE/> 
       <autoSpaceDN/> 
       <adjustRightInd/> 
       <spacing/> 
       <rPr> 
        <rFonts/> 
        <b/> 
        <bCs/> 
        <lang/> 
       </rPr> 
      </pPr> 
      <r> 
       <rPr> 
        <rFonts/> 
        <b/> 
        <bCs/> 
        <lang/> 
       </rPr> 
       <t>Title</t> 
      </r> 
     </p> 
    </body> 
</document> 

Как я могу удалить некоторые теги, не затрагивая или удаление текста внутри это мой ожидаемый результат после того, как XSLTКак удалить XML-теги только с помощью XSLT

<document><body><p>Title</p></body></document> 
+0

Не могли бы вы опубликовать свою попытку. –

+0

** Пожалуйста, не задавайте один и тот же вопрос дважды !! ** http://stackoverflow.com/questions/28362715/how-to-remove-specific-elements-but-not-the-text-inside-it- используя-XSLT –

ответ

1

Вы можете использовать это:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="p"> 
    <xsl:copy> 
     <xsl:value-of select="normalize-space(.)"/> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 
0

в принципе, вы можете воспользоваться одним из двух стратегий:

  1. Начинается с преобразования шаблона, который копирует все по умолчанию; затем добавьте шаблоны для соответствия любым узлам, которые вы хотите изменить как исключение; Это то, что вы начали делать - теперь вам нужно только добавить пустой шаблон/s, чтобы удалить узлы, которых вы не хотите.

  2. Выберите только те узлы, которые вы хотите; так как есть только один, это было бы, безусловно, предпочтительной стратегией в данном случае:

XSLT 1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/"> 
    <p> 
     <xsl:value-of select="document/body/p/r/t" /> 
    </p> 
</xsl:template> 

</xsl:stylesheet> 

возвращение результат из:

<?xml version="1.0" encoding="UTF-8"?> 
<p>Title</p> 

Вышеупомянутое предполагает, что вы действительно хотите, чтобы конкретное значение элемента <t> - не только любой текстовый узел/s, который является потомком/s элемента <p> вашего ввода. Если это предположение неверно, сделайте это вместо:

XSLT 1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    <p> 
     <xsl:value-of select="document/body/p" /> 
    </p> 
</xsl:template> 

</xsl:stylesheet> 
0

Это мой ответ, и это хорошо для меня

<xsl:template match="//*/text()"> 
    <xsl:if test="normalize-space(.)"> 
    <xsl:value-of select= 
    "concat(normalize-space(.), '&#xA;')"/> 
    </xsl:if> 

    <xsl:apply-templates /> 
</xsl:template> 

Я использовал этот и теперь моя проблема как я могу удалить теги, у которых есть пустое значение

<p/> 

Как я могу удалить этот тег после преобразования? Спасибо

Смежные вопросы