2010-06-24 3 views
1

Для следующего XMLЧто должен делать мой XSLT, когда в XML есть xmlns?

<Properties ComponentID="1272040480745" Admin="true"> 
<Datum ID="P01" Type="File" Name="CSS To Use">style.css</Datum> 
<Data> 
    <External></External> 
    <Result> 
     <results xmlns="http://www.interwoven.com/schema/iwrr" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.interwoven.com/schema/iwrr iwrr.xsd" total="1" included="1" start="0" status="200"> 
      <assets> 
       <document id="019c7c763e5ae286c7d566ff883f8199" uri="/document/id/019c7c763e5ae286c7d566ff883f8199" context="cb478aef64c6415b390e241885fd1346" path="templatedata/www/location/data/Belton"> 
        <metadata> 
         <field name="TeamSite/Metadata/locationRegion"> 
          Central 
         </field> 
        </metadata> 
       </document> 
      </assets> 
     </results> 
    </Result> 
</Data> 

Как бы выбрать атрибут пути от элемента документа? Мой текущий XSLT является:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
    <xsl:template match="/"> 
     <div>  
     <xsl:apply-templates select="Properties/Data/Result/results/assets/document"></xsl:apply-templates> 
     <xsl:text>HELLO THERE!</xsl:text> 
    </div> 
</xsl:template> 
<xsl:template match="document"> 
<xsl:value-of select="@path"></xsl:value-of> 
</xsl:template> 
</xsl:stylesheet> 

Если я удалить Xmlns, Xmlns: XSI и XSI: SchemaLocation из результатов элемента XML-XSLT будет работать. Поэтому, очевидно, я не понимаю материал пространства имен и очень ценю понимание. Благодаря

ответ

0

Это преобразование:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:iwwr="http://www.interwoven.com/schema/iwrr" 
> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:value-of select="/*/*/*/iwwr:results/*/iwwr:document/@path"/> 
</xsl:template> 
</xsl:stylesheet> 

применительно к предоставленному документу XML, производит значение из path атрибут при необходимости:

templatedata/www/location/data/Belton 
+0

Быстрый ответ спасибо – Mark

+0

Обратите внимание, что iwwr является псевдонимом для полного пространства имен в этом примере. –

+0

@ Mark-Schultheiss: Этот комментарий для меня, и если да, то в чем его смысл? Префикс пространства имен является префиксом пространства имен. По определению он связан с пространством имен-uri. Мой ответ демонстрирует, как использовать префикс пространства имен, привязанный к определенному пространству имен, чтобы сделать выражение XPath, содержащее имена элементов, принадлежащих этому пространству имен, более читаемым. –

0

Вы должны добавить пространство имен к вашему XPath тоже:

<xsl:apply-templates xmlns:iwrr="http://www.interwoven.com/schema/iwrr" select="Properties/Data/Result/iwrr:results/iwr:assets/iwr:document"></xsl:apply-templates>