2009-10-06 7 views
0

문제점 : 부모를 제거하지 않고 일부 하위 요소를 제거하려는 XML 파일이 있습니다. 누구든지 ASP.NET을 사용하여 결과를 얻을 수 있습니까? 내가 그들의 자식 노드를 삭제하지 않고, 단지 <Location><Salary> 요소를 제거 할 XML 위부터XSLT를 통해 특정 XML 요소 제거

<Jobs> 
    <Job> 
    <Title></Title> 
    <Summary</Summary> 
    <DateActive>9/28/2009</DateActive> 
    <DateExpires>10/28/2009</DateExpires> 
    <DateUpdated>9/28/2009</DateUpdated> 
    <Location> 
     <Country>India</Country> 
     <State>xxx</State> 
     <City>xxx</City> 
     <PostalCode>xxx</PostalCode> 
    </Location> 
    <CompanyName>Finance</CompanyName> 
    <Salary> 
     <Max>70,000.00</Max> 
     <Type>Per Year</Type> 
     <Currency>Dollar</Currency> 
    </Salary> 
    <BuilderFields /> 
    <DisplayOptions /> 
    <AddressType>6</AddressType> 
    <Job_Id>123456</Job_Id> 
    </Job> 

:

여기 내 XML 파일입니다. XML 파일에서 원하는 결과를 얻으려면 XSLT를 어떻게 사용합니까?

+0

당신이 제거하려고하는 것을 충분히 명확하지 않습니다. 명확히 해 주시겠습니까? –

답변

5

identity transform을 적용하는 패턴을 사용하여 모든 내용을 복사하고 LocationSalary 요소 노드에 대한 내용을 무시하고 복사하지 않고 하위 노드 만 처리 할 수 ​​있습니다.

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

    <!-- default: copy everything using the identity transform --> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <!-- override: for Location and Salary elements, just process the children --> 
    <xsl:template match="Location|Salary"> 
    <xsl:apply-templates select="node()"/> 
    </xsl:template> 

</xsl:stylesheet> 

는 후속 질문에 대한 업데이트되었습니다. , 자식 요소에 속성을 변환 일부 요소에 대한

  1. : 귀하의 예제에서, 당신이 실제로하고 싶은 다른 불분명하지만, 위 이외에, 당신은 또한 할 것으로 가정 조금이다. 속성 및 출력 요소와 일치하는 추가 겹쳐 쓰기 규칙을 추가하여이 작업을 수행 할 수 있습니다.

  2. 일부 요소의 경우 특성을 모두 제거하십시오. 위와 비슷하게 할 수 있지만 이번에는 아무것도 출력하지 않는 빈 템플릿을 사용합니다.

  3. CDATA sections을 사용하여 일부 요소의 내용을 출력합니다. cdata-section-elements 속성이 xsl:output 인 이러한 요소를 지정할 수 있습니다. 모든 것을 보여주는

예 스타일 시트 :

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

    <xsl:output method="xml" indent="yes" media-type="application/xml" 
       cdata-section-elements="Summary"/> 

    <!-- default: copy everything using the identity transform --> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <!-- override: for Location and Salary nodes, just process the children --> 
    <xsl:template match="Location|Salary"> 
    <xsl:apply-templates select="node()"/> 
    </xsl:template> 

    <!-- override: for selected elements, convert attributes to elements --> 
    <xsl:template match="Jobs/@*|Job/@*"> 
    <xsl:element name="{name()}"> 
     <xsl:value-of select="."/> 
    </xsl:element> 
    </xsl:template> 

    <!-- override: for selected elements, remove attributes --> 
    <xsl:template match="DateActive/@*|DateExpires/@*|DateUpdated/@*"/> 

</xsl:stylesheet> 
관련 문제