Как скопировать все как есть и удалить только определенный элемент - PullRequest
3 голосов
/ 06 декабря 2010
<?xml version="1.0" encoding="UTF-8"?>
<Emp:Employee xmlns:Emp="http://Emp.com">
    <Emp:EmpName>XYZ</Emp:EmpName>
    <Emp:EmpAddres>AAAA</Emp:EmpAddres>
    <Det:EmpDetails xmlns:Det="http://Det.com">
        <Det:EmpDesignation>SE</Det:EmpDesignation>
        <Det:EmpExperience>4</Det:EmpExperience>
    </Det:EmpDetails>
</Emp:Employee>

Я просто пытаюсь скопировать все элементы, включая пространство имен, но без <Det:EmpExperience>4</Det:EmpExperience>

, поэтому окончательный вывод должен быть:

<?xml version="1.0" encoding="UTF-8"?>
    <Emp:Employee xmlns:Emp="http://Emp.com">
        <Emp:EmpName>XYZ</Emp:EmpName>
        <Emp:EmpAddres>AAAA</Emp:EmpAddres>
        <Det:EmpDetails xmlns:Det="http://Det.com">
            <Det:EmpDesignation>SE</Det:EmpDesignation>
         </Det:EmpDetails>
    </Emp:Employee>

Я использовал

<xsl:template match='/'>
<xsl:copy-of select='@*[not(Det:EmpExperience)]'/>
</xsl:template>

не работает :-( ... какое-либо решение для этого плз.

как удалить только элемент <Det:EmpExperience> и скопировать остальные элементы, включая пространство имен?

1 Ответ

5 голосов
/ 06 декабря 2010

Попробуйте это (адаптировано из здесь ):

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:Det="http://Det.com">

 <xsl:output omit-xml-declaration="yes"/>

    <xsl:template match="node()|@*">
      <xsl:copy>
         <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>

    <xsl:template match="Det:EmpExperience"/>
</xsl:stylesheet>

Второй шаблон переопределяет преобразование идентичности , а пустой шаблон использует логику сопоставления (выбор Det:EmpExperience узлов).

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