2013-10-01 2 views
0

Я пытаюсь найти способ получить имя узла и отредактировать его, заменив значение varaible на значение.как захватить имя узла и заменить переменную значением

Пример:

<mbean code="abc.def.ghi" name="com.ijk.lmn:[email protected]@"> 
    <attribute name="storename">value</attribute> 
    <depends optional-attribute-name="bookname">value2</depends> 
    <attribute name="Type">ebook</attribute> 
    <attribute name="Properties"> 
    bookName=value3 
    booktype=value4 
</mbean> 

Ожидаемый результат:

<mbean code="abc.def.ghi" name="com.ijk.lmn:name=newvalue"> 
    <attribute name="storename">value</attribute> 
    <depends optional-attribute-name="bookname">value2</depends> 
    <attribute name="Type">ebook</attribute> 
    <attribute name="Properties"> 
    bookName=value3 
    booktype=value4 
</mbean> 

я испытал с этим Xsl кодом, но некоторые, как его не caprturing, что я хотел:

<xsl:template match="mbean[@name]"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*"/> 
    <xsl:analyze-string select="." regex="([\w.]+)[email protected](.*?)@"> 
     <xsl:matching-substring>  
      Value1: <xsl:value-of select="regex-group(1)"/> 
      Value2: <xsl:value-of select="regex-group(2)"/>  
     </xsl:matching-substring> 
     <xsl:non-matching-substring> 
      <xsl:value-of select="."/> 
     </xsl:non-matching-substring> 
    </xsl:analyze-string> 
    </xsl:copy>  
</xsl:template> 

I я ничего не меняю в элементах, но меняю имя узла.

ответ

1

Похоже, вы хотите написать шаблон для атрибута name элемента mbean, например.

<xsl:template match="mbean/@name"> 
    <xsl:variable name="tokens" select="tokenize(., '=')"/> 
    <xsl:attribute name="{node-name(.)}" select="concat($tokens[1], '=', 'newvalue')"/> 
</xsl:template> 

Я использовал строковый литерал как новое значение, конечно, вместо того, чтобы делать это, вы можете посмотреть на значение.

Если у вас есть внешний документ new-values.xml, например.

<values> 
    <value key="com.ijk.lmn:name">new value</value> 
</values> 

затем определяют глобальный параметр

<xsl:param name="value-url" select="'new-values.xml'"/> 

глобальную переменную

<xsl:variable name="value-doc" select="doc($value-url)"/> 

и ключ

<xsl:key name="kv" match="value" use="@key"/> 

, а затем использовать

<xsl:template match="mbean/@name"> 
    <xsl:variable name="tokens" select="tokenize(., '=')"/> 
    <xsl:attribute name="{node-name(.)}" select="concat($tokens[1], '=', key('kv', $token[1], $value-doc))"/> 
</xsl:template> 
+0

Как я могу найти значение из внешнего XML-документа. – phani

+0

@phani, я отредактировал ответ, чтобы показать некоторый поиск с помощью ключа. –

+0

спасибо за дополнительные входные данные. – phani

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