2016-08-10 1 views
0

제품 및 항목이있는 xml 파일이 있습니다. 제품에 품목이 있거나 없을 수 있습니다. 나는 물건이없는 제품 만 얻고 싶다. 해당 제품 아래에 항목이없는 xml 파일의 제품 만 가져 오기

내가 XML 파일에서이 같은 내 출력을 원하는 내 입력

<?xml version="1.0" encoding="UTF-8"?> 
<products> 
    <product> 
     <prod-id>P16753</prod-id> 
     <product-status>CREATED</product-status> 
     <validation-status>Valid</validation-status> 
     <duplication-status>Unique</duplication-status> 
     <content-status>New</content-status> 
     <items/> 

     <created-on>2016-08-12T11:30:00</created-on> 
     <created-by>Administrator</created-by> 
     <last-changed-on>2016-08-04T17:34:00</last-changed-on> 
     <last-changed-by>ap0712</last-changed-by> 
     <delete>false</delete> 
    </product> 
    <product> 

     <prod-id>P16754</prod-id> 
     <product-status>CREATED</product-status> 
     <validation-status>Valid</validation-status> 
     <duplication-status>Unique</duplication-status> 
     <content-status>New</content-status> 
     <items> 
      <item> 
       <item-id>i16754</item-id> 
       <item-status>CREATED</item-status> 
       <validation-status>Valid</validation-status> 
       <duplication-status>Unique</duplication-status> 
       <content-status>New</content-status> 
      </item> 
     </items> 

     <created-on>2016-08-12T11:30:00</created-on> 
     <created-by>Administrator</created-by> 
     <last-changed-on>2016-08-04T17:34:00</last-changed-on> 
     <last-changed-by>ap0712</last-changed-by> 
     <delete>false</delete> 
    </product> 
</products> 

입니다. 가능하다면, 나는 csv 파일로 변환 할 수 있도록 태그를 제거하려면 나중에

prod-id P16754 

내가 XSLT 코드가 (나는이 포럼에서 가지고있는)하지만 난이 일을 할 수없는 생각

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


<ns:WhiteList> 
    <name>prod-id</name> 
</ns:WhiteList> 

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

<xsl:template match= 
    "*[not(descendant-or-self::*[name()=prod-id[not(items/item)]document('')/*/ns:WhiteList/*])]"/> 

</xsl:transform> 
+0

XML이 아닌 일반 텍스트가 필요한 경우 ID 템플릿을 사용하는 것이 의미가 없습니다. "아이템이없는 제품 만 가져오고 싶습니다."라고 말하면, 'items/item' 자손이없는 완전한'product' 엘리먼트를 선택하겠습니까? 원하는 출력 스 니펫에는'prod-id P16754' 요소 하나만 포함되며 완전한'product' 요소는 아닙니다. 따라서 어떤 데이터를 출력 할 것인지 자세하게 설명하십시오. –

답변

0

당신은 출력이

prod-id P16753 
입니다 샘플링하여 입력

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

    <xsl:template match="/"> 
     <xsl:value-of select="products/product[not(items/item)]/prod-id/concat(local-name(), ' ', .)" separator="&#10;"/> 
    </xsl:template> 

</xsl:transform> 

다음 사용하는 경우

온라인 샘플은 http://xsltransform.net/pPJ8LUP입니다.

+0

... 감사합니다. 그러나 그것은 나를 위해 일하지 않습니다. xsl flie를 XML로 실행하면 오류가 발생합니다. XML 문서에는 최상위 요소 Error가 있어야합니다. 이 일이 왜 일어나야하는지 조언 해 주시겠습니까? Google에서 검색 한 내용이 잘못된 xml 파일 때문일 수 있지만 다른 xslt 파일에 대해 동일한 xml 파일이 작동합니다. – adit

+0

방금 ​​입력 파일을 편집했습니다. 두 제품의 번호가 같았습니다. 나는 첫번째 것을 바꿨다. 지금은 prod-id P16753을 출력하고 싶습니다. 당신은 이미 그것을 이해하고 올바른 방법을 시도했을지 모르지만 나는 단지 확신하고 있습니다. – adit

+0

@adit, 편집을 참조하십시오, 나는 그 해답이 문제를 해결한다고 생각한다. –