2013-10-10 4 views
0

Мне нужно найти, доступен ли атрибут в любом месте XML с помощью XSL. Например, в приведенном ниже xml мне нужно проверить, существует ли атрибут Manager в любом месте. Если существует, мне нужно сгенерировать вывод CSV с EmployeeID, Name & В столбцах менеджера, иначе как EmployeeID &. Названия столбцов.Как найти, доступен ли атрибут в XML, используя XSL

<Root> 
    <Metadata> 
    <id>A001</id> 
    <name>Test</name> 
    </Metadata> 
    <Employers> 
    <Employer> 
     <Employee id="aaa"><Name>Rick</Name></Employee> 
     <Employee id="bbb"><Name>Ram</Name></Employee> 
    </Employer> 
    <Employer Manager="True"> 
     <Employee id="ddd"><Name>Bob</Name></Employee> 
     <Employee id="dcc"><Name>Tan</Name></Employee> 
    </Employer> 
    <Employer> 
     <Employee id="fff"><Name>Zak</Name></Employee> 
     <Employee id="vvv"><Name>sha</Name></Employee> 
    </Employer> 
    </Employers> 
</Root> 

Пожалуйста, помогите мне.

ответ

1

Попробуйте следующее выражение XPath:

//@Manager 

Или, если атрибут Manager должен содержать строку True:

//@Manager[.='True'] 

// является аббревиатурой для /descendant-or-self::node()/. Таким образом, //@Manager возвращает каждый атрибут Manager в документе. Повторяя все узлы в документе стоит дорого, так что это хорошая идея, чтобы использовать глобальную переменную, которая говорит, есть ли Manager атрибут:

<xsl:variable name="has-manager-attr" select="boolean(//@Manager)"/> 

Я использовал функцию boolean, так как мы заинтересованы только в том в Manager атрибут существует. Затем вы можете проверить эту переменную в шаблоне, который создает линии CSV:

<!-- add name and id columns --> 
<xsl:if test="$has-manager-attr"> 
    <!-- add manager column --> 
</xsl:if> 
+0

Спасибо, сработало. – user972255

1
<xsl:template match="someElement/@someAttrName"> 
<!-- DO BLOCK --> 
</xsl:template> 
Смежные вопросы