2017-02-11 3 views
0

Из следующего файла:-преобразование XSLT для извлечения реф-данных не извлекает почти ничего

<!--?xml version="1.0" encoding="UTF-8"?--> 
<html> 
<head> 
    <title>ERKLAERUNG</title> 

</head> 
<body> 
    <h1>Erklärung</h1> 

    <p>Ich kenne einen Herrn <span class="vcard"> <span class="fn">Henry 
    Riedel</span> (<i class="nick">hrick</i>) , der in einer <span 
    class="org">Hauschuhfirma</span> arbeitet. Seine Telefonnummer (<span 
    class="tel"> <i class="type">home</i>) ist: <span 
    class="value">+4.444.444.4442</span> </span> </span> Er ist mir als sehr 
    zuverlässiger Kollege in Erinnerung. Seine Aufgaben hat er stets 
    pflichtgemäß 
    erfüllt. Er war stets hilfsbereit und hat seine Kollegen nach besten 
    Kräften 
    unterstützt. 
    </p> 
    <p>Außerdem ist mir ein Herr <span class="vcard"> <span class="fn">Peter 
    Liebig</span> (<i class="nick">pitty</i>) bekannt, der an der <a 
    class="org" href="http://www.tu-chemnitz.de">TU Chemnitz</a> arbeitet. 
    Seine Telefonnummer (<span class="tel"> <i class="type">home</i>) ist: 
    <span class="value">+7.777.777.7777.</span> </span> </span> Auch er hat 
    stets seine Pflicht erüllt, obwohl er manchmal zu spät zur Arbeit kam. Er 
    hst sich bemüht, diese Ausfallzeiten nachzuarbeiten. </p> 
    <p>Ich kennen aber keinen Herrn <span class="vcard"> <span class="fn">Ralph 
    Schneider</span>. (<i class="nick">Ralphy</i>) Ich habe lediglich über 
    Dritte erfahren, dass er bei <a class="org" 
    href="http://www.google.de">Google</a> beschäftigt sein soll. </span> Ich 
    muss energisch bestreiten, diesen Mitarbeiter zu kennen. Ich habe zwar über 
    ihn reden hören, aber ich habe in nie getroffen und auch sonst keinen 
    Kontakt zu ihm gehabt.</p> 
    <p>Auch Herrn <span class="vcard"> <span class="fn">Reiner Kuster</span> 
    kenne ich nur flüchtig. </span> </p> 
    </body> 
    </html> 

Я хочу, чтобы извлечь определенные данные и сохранять их как РФР. С этой целью я написал следующий XSLT-код:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:vc="http://example.org/vcard#" 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:h="http://www.w3.org/1999/xhtml" 
exclude-result-prefixes="xs" 
version="2.0"> 

<xsl:template match="/"> 
    <rdf:RDF xmlns:vc="http://example.org/vcard#" 
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
     xmlns:h="http://www.w3.org/1999/xhtml"> 

     <xsl:apply-templates select="*[@class='vcard']"/> 

    </rdf:RDF> 
</xsl:template> 

<xsl:template match="*[@class='vcard']"> 
    <rdf:Description> 
     <xsl:attribute name="rdf:about"> 
      <xsl:value-of select="concat('vc:vcard_id', position() - 1)"/> 
     </xsl:attribute> 
     <xsl:if test=".//*[@class='fn']"> 
      <vc:hasName> 
       <xsl:value-of select=".//*[@class='fn']"/> 
      </vc:hasName> 
     </xsl:if> 
     <xsl:if test=".//*[@class='nick']"> 
      <vc:hasNickName> 
       <xsl:value-of select=".//*[@class='nick']"/> 
      </vc:hasNickName> 
     </xsl:if> 
     <xsl:if test=".//*[@class='tel']/*[@class='value']"> 
      <vc:phone> 
       <xsl:value-of select=".//*[@class='tel']/*[@class='value']"/> 
      </vc:phone> 
     </xsl:if> 
    </rdf:Description> 
</xsl:template> 

Но вместо того, чтобы давать мне желаемый результат, который будет выглядеть следующим образом:

<rdf:RDF xmlns:vc="http://example.org/vcard#" 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:h="http://www.w3.org/1999/xhtml"> 
    <rdf:Description rdf:about="vc:vcard_id0"> 
    <vc:hasName>Henry Riedel</vc:hasName> 
    <vc:hasNickName>hrick</vc:hasNickName> 
    <vc:phone>+4.444.444.4442</vc:phone> 
</rdf:Description> 

<rdf:Description rdf:about="vc:vcard_id1"> 
    <vc:hasName>Peter Liebig</vc:hasName> 
    <vc:hasNickName>pitty</vc:hasNickName> 
    <vc:phone>+7.777.777.7777.</vc:phone> 
</rdf:Description> 

<rdf:Description rdf:about="vc:vcard_id2"> 
    <vc:hasName>Ralph Schneider</vc:hasName> 
    <vc:hasNickName>Ralphy</vc:hasNickName> 
</rdf:Description> 

<rdf:Description rdf:about="vc:vcard_id3"> 
    <vc:hasName>Reiner Kuster</vc:hasName> 
</rdf:Description> 

</rdf:RDF> 

... работает в XSLT -трансформация дает мне только следующие данные:

<?xml version="1.0" encoding="UTF-8"?><rdf:RDF 
xmlns:vc="http://example.org/vcard#" xmlns:rdf="http://www.w3.org/1999/02/22- 
rdf-syntax-ns#" xmlns:h="http://www.w3.org/1999/xhtml"/> 

До сих пор я использовал xslt exclusi vely для преобразования xml в html. Поэтому я предполагаю, что моя ошибка имеет какое-то отношение к rdf-аспекту этой задачи.

Когда я впервые попробовал запустить преобразование XSLT, я получил следующее сообщение об ошибке:

The prefix "rdf" for element "rdf:Description" is not bound. 

Я тогда включал определение пространства имен целевого РДФА-файл (т.е. РДФ-файл, который будет создан преобразование), и сообщение об ошибке исчезло. Однако выход преобразования практически не содержит данных. Я не знаю, что я делаю неправильно. Если кто-нибудь знает, я был бы благодарен за ответ.

ответ

4

Инструкция:

<xsl:apply-templates select="*[@class='vcard']"/> 

ищет детей текущего узла, которые имеют атрибут class со значением «VCard». Поскольку текущий узел является корневым узлом / (единственным дочерним элементом которого является корень html), таких детей не найдено. Попробуйте изменить его на:

<xsl:apply-templates select="//*[@class='vcard']"/> 

, который будет искать элементы с таким атрибутом во всем документе на любом уровне.

+0

Большое спасибо! Это решило. – Tommy

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