2013-03-15 2 views
0

저는 XSLT 초보자이며 XSLT를 사용하여 미국 특허 및 상표청의 상표 파일에서 일부 필드를 추출해야합니다. 내가 좋아하는 것 XSLT 1.0을 사용하여이 XML에서 필드를 추출하려면 어떻게합니까?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Transaction xmlns:ns2="urn:us:gov:doc:uspto:trademark:status" xmlns="http://www.wipo.int/standards/XMLSchema/trademarks"> 
    <TradeMarkTransactionBody> 
    <TransactionContentDetails> 
     <TransactionCode>National Trademark Information</TransactionCode> 
     <TransactionData> 
     <TradeMarkDetails> 
      <TradeMark> 
      <RegistrationOfficeCode>US</RegistrationOfficeCode> 
      <ApplicationNumber>74631225</ApplicationNumber> 
      <ApplicationDate>1995-02-07-05:00</ApplicationDate> 
      <RegistrationNumber>2178784</RegistrationNumber> 
      <RegistrationDate>1998-08-04-04:00</RegistrationDate> 
      <FilingPlace>US</FilingPlace> 
      <MarkCurrentStatusDate>2008-08-11-04:00</MarkCurrentStatusDate> 
      <WordMarkSpecification> 
       <MarkVerbalElementText>JAVA </MarkVerbalElementText> 
      </WordMarkSpecification> 
      </TradeMark> 
     </TradeMarkDetails> 
     </TransactionData> 
    </TransactionContentDetails> 
    </TradeMarkTransactionBody> 
</Transaction> 

생산 할 수 있도록 : 여기에 일반적인 파일의 매우 단순화 된 사본의 다음
App number: 74631225 

내 실패한 시도의 부부는; 시도 # 1 :

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" encoding="utf-8" /> 
    <xsl:template match="/"> 
    App number: <xsl:value-of select="/Transaction/TradeMarkTransactionBody/TransactionContentDetails/TransactionData/TradeMarkDetails/TradeMark/ApplicationNumber"/> 
    </xsl:template> 
</xsl:stylesheet> 

만 생성합니다 :

App number: 

시도 # 2 :

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" encoding="utf-8" /> 
    <xsl:template match="/Transaction/TradeMarkTransactionBody/TransactionContentDetails/TransactionData/TradeMarkDetails/TradeMark"> 
    App number: <xsl:value-of select="ApplicationNumber"/> 
    </xsl:template> 
</xsl:stylesheet> 

가 생산 : 어떤 도움을 주시면 감사하겠습니다

National Trademark Information 



     US 
     74631225 
     1995-02-07-05:00 
     2178784 
     1998-08-04-04:00 
     US 
     2008-08-11-04:00 

      JAVA 

. 일단이 문을 지나서 최소한 하나의 필드가 작동하게되면, 나는 내 프로젝트의 진짜 실체에 들어갈 수 있기를 바랍니다. 중요하다면 MSXSL과 Treebeard (Saxon을 사용하는 것 같습니다)를 사용하고 있습니다.

답변

2

XSLT 코드에 네임 스페이스 선언이 없습니다. 당신의 XML 문서의 루트 요소를 확인,이 말한다 :

의미
xmlns="http://www.wipo.int/standards/XMLSchema/trademarks" 

, 당신의 XML 문서의 요소 중 하나라도 해당 네임 스페이스에 있습니다.

반면 XSLT에서는 네임 스페이스를 지정하지 않았습니다. 즉, XSLT 프로세서가 "빈 네임 스페이스"가있는 XSLT에 지정된 요소 이름을 찾습니다. XSLT에 언급 된 Transaction은 Xml 문서에 언급 된 Transaction (http://www.wipo.int/standards/XMLSchema/trademarks 네임 스페이스에서 제공)과 같은 요소가 아닙니다.

XSLT, 또는 오히려 XPath에, 당신은 어떤 임의의 접두사를 지정해야합니다 이유는 "기본"(접두사없는) 네임 스페이스의 개념을 모르는 - tm 말 :

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tm="http://www.wipo.int/standards/XMLSchema/trademarks"> 
<xsl:output method="text" encoding="utf-8" /> 
    <xsl:template match="/"> 
    App number: <xsl:value-of select="/tm:Transaction/tm:TradeMarkTransactionBody/tm:TransactionContentDetails/tm:TransactionData/tm:TradeMarkDetails/tm:TradeMark/tm:ApplicationNumber"/> 
    </xsl:template> 
</xsl:stylesheet> 

이것은 당신이 찾고있는 것에 더 가까이 다가 가야합니다. 나는 지금부터 단지 몇 시간 만에 이것을 시도 할 수있다. 도움이 더 필요하면 의견을 남겨주세요.이 질문에 대해 다시 확인하겠습니다.

+0

Perfect! 그거야. 매우 감사합니다. – codingatty

관련 문제