Announcement

Collapse
No announcement yet.

Zwei Variablen zusammenführen (document())

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zwei Variablen zusammenführen (document())

    Hallo,

    ich hab mal wieder ein Problem.

    Ich möchte auf einen Wert aus einem externen Document zugreifen aber der Xpath wird mir als Attribut aus einem anderen XML Document geliefert. Aber document() will das absolut nicht akzeptieren.

    Hier mal ein Auschnitt.

    Der Inhalt
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <!--Sample XML file generated by XMLSpy v2007 sp2 (http://www.altova.com)-->
    <SecurityLabel xmlns="IVM" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="IVM seclabel.xsd">
    	<Policy>Pol</Policy>
    	<Classification>unmarked</Classification>
    	<PrivacyMark>3</PrivacyMark>
    	<Category>
    		<CategoryID>atomal</CategoryID>
    		<CategoryData>TestCategoryData</CategoryData>
    	</Category>
    </SecurityLabel>
    Beschreibendes Document für meine Treeview
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <treeview title="Seclabel">
    	<folder title="SecurityLabel" img="MyDocuments.gif">
    		<leaf title="Policy" code="/x:SecurityLabel/x:Policy/" img="folder.gif"></leaf>
    		<leaf title="Classification" code="/x:SecurityLabel/x:Classification/" img="folder.gif"></leaf>
    		<leaf title="PrivacyMark"  code="/x:SecurityLabel/x:PrivacyMark/" img="folder.gif"></leaf>
    		<folder title="Category" code="1" img="MyDocuments.gif">
    			<leaf title="CategoryID" code="/x:SecurityLabel/x:Category/x:CategoryID/" img="folder.gif"></leaf>
    			<leaf title="CategoryData" code="/x:SecurityLabel/x:Category/x:CategoryData/" img="folder.gif"></leaf>
    		</folder>
    	</folder>
    </treeview>

    Code:
    <xsl:variable name="doc" select="document('file:///c:/data/seclabel-aktiv.xml')"></xsl:variable>
    <input name="@title" value="{concat($doc,@code)}"></input>
    Und die Ausgabe

    Code:
    <xsl:value-of select="concat($doc,@code)"/>
    
    Pol unmarked 3 atomal TestCategoryData /x:SecurityLabel/x:Policy/
    Ich möchte ja den Wert an der Position nicht alle Werte mit angehängten XPath. Ich hab das Document ich hab den XPath aber ich komm net weiter. Hab schon ziemlich rumprobiert z.B. Mit + vernüpfen bekomme ich nen NaN.....

    Thx 4 help

  • #2
    Bitte nochmal genauer beschreiben, welche Daten abgefragt werden sollen.

    Comment


    • #3
      Also
      ich hab eine XML- Datei die, die eine Baumstruktur beschreibt. Diese Baumstruktur
      wird auf einer JSP- Seite mit Javascript dargestellt.

      In dieser XML- Datei kann ich mit dem Attribut Code einen beliebigen String an die XSL übergeben. Diese XML- Datei hab ich mit der Beschrifftung "Beschreibendes Document für meine Treeview" gepostet. Im Attribut Code trage ich nun den XPath zum jeweiligen Wert ein den ich in einer anderen XML Datei habe. Diese XML- Datei hab ich mit der Beschrifftung "Der Inhalt" gepostet.

      Ich vernüpfe mit JSTL die Baumstruktur XML und eine ziemlich komplizierte XSLT die die XML interpretiert und darstellt.

      Siehe das Bild unten.


      Wie man im Bild sieht hab ich zu jedem Element ein Feld wo man den Wert ändernt kann. Mein Ziel ist es erstmal den vorhandenen Wert dort ins Input Feld einzufügen. Der Wert ist in der XML "Der Inhalt zu finden" an der stelle wo es das Attribut Code beschreibt.


      Ich poste noch den Inhalt der XSL:
      Code:
      	<xsl:variable name="doc" select="document('file:///c:/data/seclabel-aktiv.xml')"></xsl:variable>
      
      <xsl:template match="leaf">
      		<table border="0" cellspacing="0" cellpadding="0">
      			<tr>
      				<td width="{$param-shift-width}"/>
      				<td>
      					<a class="leaf">
      						<!-- The line is very long bu I have no choice, I called the function replace-string to replace the quotes (') by /' -->
      						<xsl:attribute name="onclick">selectLeaf('<xsl:call-template name="replace-string"><xsl:with-param name="text" select="@title"/><xsl:with-param name="from" select="$var-simple-quote"/><xsl:with-param name="to" select="$var-slash-quote"/></xsl:call-template>','<xsl:call-template name="replace-string"><xsl:with-param name="text" select="@code"/><xsl:with-param name="from" select="$var-simple-quote"/><xsl:with-param name="to" select="$var-slash-quote"/></xsl:call-template>')</xsl:attribute>
      						<!-- if it is the last leaf, print a different image for the link to the folder-->
      						<xsl:choose>
      							<xsl:when test="position()=last()">
      								<img src="{$param-img-directory}lastlink.gif"/>
      							</xsl:when>
      							<xsl:otherwise>
      								<img src="{$param-img-directory}link.gif"/>
      							</xsl:otherwise>
      						</xsl:choose>
      						<img src="{$param-img-directory}{@img}">
      							<!-- if the attribut alt is present-->
      							<xsl:if test="@alt">
      								<!-- if Netscape / Mozilla -->
      								<xsl:if test="$param-is-netscape='true'">
      									<xsl:attribute name="title"><xsl:value-of select="@alt"/></xsl:attribute>
      								</xsl:if>
      								<!-- if Internet Explorer -->
      								<xsl:if test="$param-is-netscape='false'">
      									<xsl:attribute name="alt"><xsl:value-of select="@alt"/></xsl:attribute>
      								</xsl:if>
      							</xsl:if>
      						</img>
      						<xsl:value-of select="@title"/>
      						<img src="{$param-img-directory}leaf.gif"></img>
      						
          					<input name="@title" value=""><xsl:value-of select="concat($doc,@code)"></xsl:value-of></input>
      					</a>
      				</td>
      			</tr>
      		</table>
      	</xsl:template>
      Die Rot makiete Zeile stellt die Inputbox dar. Die Variable $doc entält das XML dokument mit den Werten. @code ist das beliebige Attribut aus der XML- Datei mit dem Xpath zum Wert.

      Schreibe ich nun:
      Code:
      <input name="@title" value="{$doc/x:SecurityLabel/x:Policy}"/>
      steht in allen inputboxen der Wert von /x:SecurityLabel/x:Policy

      Ich suche eine Möglichkeit das gleiche mit dem $doc und @code zu erreichen.
      Attached Files

      Comment


      • #4
        Dein Problem liegt hier:
        Code:
        select="concat($doc,@code)"
        Nach dem concat() steht eine Zeichenkette im select-Attribut, also etwa select="'blablub'" und eben kein XPath-Ausdruck mehr. Eine Lösung könnte das dynamische serverseitige Erstellen eines weiteren Stylesheets sein, welches dann mittels xsl:include eingefügt wird und dieses den String wieder als XPath-Ausdruck verwendet. Eine andere triviale Lösung sehe ich nicht.

        Comment

        Working...
        X