Я работаю над проблемой, когда мне нужно добавить атрибут к элементу при определенных условиях. Вот XML, который у меня есть. Когда AdditionalItem
элемент имеет непустое Value
элемент, мне нужно добавить атрибут действие как таковой:Добавление атрибута через xslt
<AdditionalItems>
**<AdditionalItem>**
<Keys>
<Key>Intake Source</Key>
</Keys>
<IdentifierDisplay>Intake Source</IdentifierDisplay>
<DataType>
<type>Enumeration</type>
<enumeration>
<String>311</String>
<String>NIS Inspector</String>
<String>Other CCD Agency</String>
</enumeration>
<inputRange>
<maxValue>0.0</maxValue>
</inputRange>
<Enumerations>
<Enumeration>
<Keys>
<Key>311</Key>
</Keys>
<IdentifierDisplay>311</IdentifierDisplay>
</Enumeration>
<Enumeration>
<Keys>
<Key>NIS Inspector</Key>
</Keys>
<IdentifierDisplay>NIS Inspector</IdentifierDisplay>
</Enumeration>
<Enumeration>
<Keys>
<Key>Other CCD Agency</Key>
</Keys>
<IdentifierDisplay>Other CCD Agency</IdentifierDisplay>
</Enumeration>
</Enumerations>
<inputRequired>false</inputRequired>
<fieldType>Enumeration</fieldType>
</DataType>
<Name>Intake Source</Name>
**<Value>311</Value>**
<security>F</security>
<drillDown>false</drillDown>
</AdditionalItem>
<AdditionalItem>
<Keys>
<Key>Other CCD Agency</Key>
</Keys>
<IdentifierDisplay>Other CCD Agency</IdentifierDisplay>
<DataType>
<type>String</type>
<inputRange>
<maxValue>0.0</maxValue>
</inputRange>
<inputRequired>false</inputRequired>
<fieldType>Text</fieldType>
</DataType>
<Name>Other CCD Agency</Name>
<Value/>
<security>F</security>
<drillDown>false</drillDown>
</AdditionalItem>
<AdditionalItem>
<Keys>
<Key>311 Agent</Key>
</Keys>
<IdentifierDisplay>311 Agent</IdentifierDisplay>
<DataType>
<type>String</type>
<inputRange>
<maxValue>0.0</maxValue>
</inputRange>
<inputRequired>false</inputRequired>
<fieldType>Text</fieldType>
</DataType>
<Name>311 Agent</Name>
<Value/>
<security>F</security>
<drillDown>false</drillDown>
</AdditionalItem>
<AdditionalItem>
<Keys>
<Key>Case Number</Key>
</Keys>
<IdentifierDisplay>Case Number</IdentifierDisplay>
<DataType>
<type>String</type>
<inputRange>
<maxValue>0.0</maxValue>
</inputRange>
<inputRequired>false</inputRequired>
<fieldType>Text</fieldType>
</DataType>
<Name>Case Number</Name>
<Value/>
<security>F</security>
<drillDown>false</drillDown>
</AdditionalItem>
<AdditionalItem>
<Keys>
<Key>Case Created Date</Key>
</Keys>
<IdentifierDisplay>Case Created Date</IdentifierDisplay>
<DataType>
<type>Date</type>
<inputRange>
<maxValue>0.0</maxValue>
</inputRange>
<inputRequired>false</inputRequired>
<fieldType>Date</fieldType>
</DataType>
<Name>Case Created Date</Name>
<Value/>
<security>F</security>
<drillDown>false</drillDown>
</AdditionalItem>
<AdditionalItem>
<Keys>
<Key>Complaintant Name:</Key>
</Keys>
<IdentifierDisplay>Complaintant Name:</IdentifierDisplay>
<DataType>
<type>String</type>
<inputRange>
<maxValue>0.0</maxValue>
</inputRange>
<inputRequired>false</inputRequired>
<fieldType>Text</fieldType>
</DataType>
<Name>Complaintant Name:</Name>
<Value>Fred Fredderson</Value>
<security>F</security>
<drillDown>false</drillDown>
</AdditionalItem>
<AdditionalItem>
<Keys>
<Key>Phone Number:</Key>
</Keys>
<IdentifierDisplay>Phone Number:</IdentifierDisplay>
<DataType>
<type>String</type>
<inputRange>
<maxValue>0.0</maxValue>
</inputRange>
<inputRequired>false</inputRequired>
<fieldType>Text</fieldType>
</DataType>
<Name>Phone Number:</Name>
<Value>3033333333</Value>
<security>F</security>
<drillDown>false</drillDown>
</AdditionalItem>
<AdditionalItem>
<Keys>
<Key>Email</Key>
</Keys>
<IdentifierDisplay>Email</IdentifierDisplay>
<DataType>
<type>String</type>
<inputRange>
<maxValue>0.0</maxValue>
</inputRange>
<inputRequired>false</inputRequired>
<fieldType>Text</fieldType>
</DataType>
<Name>Email</Name>
<Value>[email protected]</Value>
<security>F</security>
<drillDown>false</drillDown>
</AdditionalItem>
<AdditionalItem>
<Keys>
<Key>Council District:</Key>
</Keys>
<IdentifierDisplay>Council District:</IdentifierDisplay>
<DataType>
<type>String</type>
<inputRange>
<maxValue>0.0</maxValue>
</inputRange>
<inputRequired>false</inputRequired>
<fieldType>Text</fieldType>
</DataType>
<Name>Council District:</Name>
<Value/>
<security>F</security>
<drillDown>false</drillDown>
</AdditionalItem>
<AdditionalItem>
<Keys>
<Key>Inspector Distict:</Key>
</Keys>
<IdentifierDisplay>Inspector Distict:</IdentifierDisplay>
<DataType>
<type>String</type>
<inputRange>
<maxValue>0.0</maxValue>
</inputRange>
<inputRequired>false</inputRequired>
<fieldType>Text</fieldType>
</DataType>
<Name>Inspector Distict:</Name>
<Value/>
<security>F</security>
<drillDown>false</drillDown>
</AdditionalItem>
<AdditionalItem>
<Keys>
<Key>Permit Number</Key>
</Keys>
<IdentifierDisplay>Permit Number</IdentifierDisplay>
<DataType>
<type>String</type>
<inputRange>
<maxValue>0.0</maxValue>
</inputRange>
<inputRequired>false</inputRequired>
<fieldType>Text</fieldType>
</DataType>
<Name>Permit Number</Name>
<Value/>
<security>F</security>
<drillDown>false</drillDown>
</AdditionalItem>
</AdditionalItems>
Моя первая мысль была сделать for-each
на //AdditionalItem
, а затем проверить, чтобы увидеть, если длина элемента Value
было> 0. Если это так, добавьте атрибут action. Это похоже на разумный подход? Что-то похожее на это:
<xsl:for-each select="/ns2:UpdateCAP/ns2:AdditionalInformation//AdditionalItem">
<xsl:if test="string-length(Value) > 0">
<!-- somehow add the attribute -->
</xsl:if>
</xsl:for-each>
Ох - атрибут должен быть: –