Как извлечь ключ элемента, разделенного запятой? - PullRequest
2 голосов
/ 12 апреля 2011

XML ...

<BaseElement>
     <AttributeList
     >ThreadId=1,ThreadName=Foo,ApplicationName=Bar</AttributeList>
</BaseElement>

Я пытаюсь извлечь значение из ThreadId ...

<xsl:apply-templates select="AttributesList"/>

Приведенный выше выводит на экран весь список;ThreadId=1,ThreadName=Foo, ...

Заглянул в подстроку, но она выглядит довольно фиксированной в природе.Он должен быть динамическим, так что если клавиша , которая в этом случае будет ThreadId, изменится на NewFangledThreadId, она продолжит функционировать.

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

Это преобразование полностью параметризовано и является общим :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:param name="pAttrName" select="'AttributeList'"/>
 <xsl:param name="pKeyName" select="'ThreadId'"/>

 <xsl:template match="/">
  <xsl:value-of select=
   "substring-before(
           substring-after(concat(',',
                                   /*/*[name()=$pAttrName],
                                   ','
                                  ),
                            concat(',', $pKeyName, '=')
                            ),
                     ','
                     )
   "/>
 </xsl:template>
</xsl:stylesheet>

при применении к предоставленному документу XML :

<BaseElement>
    <AttributeList
    >ThreadId=1,ThreadName=Foo,ApplicationName=Bar</AttributeList>
</BaseElement>

желаемый, правильный результат получается:

1

Когда мы просто указываем :

 <xsl:param name="pKeyName" select="'ApplicationName'"/>

снова правильный результатпроизводится :

Bar
1 голос
/ 12 апреля 2011

Следующая таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:template match="AttributeList">
        <xsl:value-of select="substring-before(substring-after(., '='), ',')"/>
    </xsl:template>
</xsl:stylesheet>

Выход:

1

Выбирает часть строки, которая идет после первого = и до первого ,.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...