У меня есть большой xsl: выберите (например, ~ 100), где xsl: при тестировании с использованием регулярного выражения. Я ищу более чистый способ, может ли это быть заменено справочной таблицей? Это всего лишь пример моего кода выглядит сегодняПоиск в XSLT с использованием регулярного выражения
<xsl:when test="matches($seq4, '^\w+-\w+-\w+-\d+/NCell:.+$', 'i')">
<xsl:value-of select="'NEIGHBOR'"/>
</xsl:when>
<xsl:when test="matches($seq4, '(/ULoCell:NodeB Function Name=.*, Local Cell ID=.*)', 'i')">
<xsl:value-of select="'SECTOR'"/>
</xsl:when>
Я ценю помощь, и я думаю, что я могу сделать код работу Карты образца, если я сделаю это отдельный XML-файл и использовать импорт или включить. Мне просто интересно, как сложно было бы преобразовать это в поиск документа. Я знаком с поиском документов и ключами, но я понятия не имею, как бы закодировать поиск с помощью регулярного выражения? У меня есть следующий документ: подстановок
<Telsa xmlns:xs="http://www.w3.org/2001/XMLSchema">
<Row Key1="^[A-Z0-9]+/Cell:eNodeB Function Name=[A-Z0-9]+, Local Cell ID=[0-9]+, Cell Name=.*/CnOperator:CnOperatorId=[0-9]+$" ElementType="CELL_CORE_OPERATOR" RegexReplace="'^([A-Z0-9]+)/Cell:eNodeB Function Name=[A-Z0-9]+, Local Cell ID=([0-9]+), Cell Name=.*/CnOperator:(CnOperatorId=[0-9]+)', '$1/CELL:$2/$3'"></Row>
<Row Key1="^\w+-\w+-\w+-\d+/Cell:eNodeB Function Name=[A-Z0-9]+, Local Cell ID=[0-9]+, Cell Name=.*, eNodeB ID=[0-9]+, Cell.*$" ElementType="CELL" RegexReplace="'^\w+-\w+-\w+-\d+/Cell:eNodeB Function Name=([A-Z0-9]+), Local Cell ID=([0-9]+), Cell Name=.*, eNodeB ID=([0-9]+), Cell.*$', '$1/Cell:$2'"></Row>
<Row Key1="^\w+-\w+-\w+-\d+/EthernetInterface:Ethernet Interface No.=.*$" ElementType="EthernetInterface" RegexReplace="'^(\w+-\w+-\w+-\d+)/EthernetInterface:Ethernet Interface No.=([0-9]+)$' , '$1/No=$2'"></Row>
<Row Key1="^[A-Z0-9]+/CELL:Local cell identity=[0-9]+, Cell Name=.*/OPERATOR:CnOperatorId=[0-9]+$" ElementType="CELL_CORE_OPERATOR" RegexReplace="'^([A-Z0-9]+/CELL:)Local cell identity=([0-9]+), Cell Name=.*/OPERATOR:(CnOperatorId=[0-9]+)' , '$1$2/$3'"></Row>
<Row Key1="^[A-Z0-9]+/Cell:Local cell identity=[0-9]+, Cell Name=.*, eNodeB identity=[0-9]+$" ElementType="CELL" RegexReplace="'^([A-Z0-9]+/Cell:)Local cell identity=([0-9]+), Cell Name=.*, eNodeB identity=[0-9]+$', '$1$2'"></Row>
<Row Key1="^[A-Z0-9]+/Cell:eNodeB Function Name=[A-Z0-9]+, Local Cell ID=[0-9]+, Cell Name=.*, eNodeB ID=[0-9]+$" ElementType="CELL" RegexReplace="'^([A-Z0-9]+)/Cell:eNodeB Function Name=[A-Z0-9]+, Local Cell ID=([0-9]+), Cell Name=.*, eNodeB ID=([0-9]+)$', '$1/Cell:$2'"></Row>
<Row Key1="^[A-Z0-9]+/Cell:eNodeB Function Name=[A-Z0-9]+, Local Cell ID=[0-9]+, Cell Name=.*, eNodeB ID=[0-9]+$" ElementType="CELL" RegexReplace="'^([A-Z0-9]+)/Cell:eNodeB Function Name=[A-Z0-9]+, Local Cell ID=([0-9]+), Cell Name=.*, eNodeB ID=([0-9]+)$', '$1/Cell:$2'"></Row>
</Telsa>
Я бы определить поиск с
<xsl:key name="table-lookup" match="Row" use="@Key1"/>
<xsl:variable name="LookupDoc" select="document('Telsa.xml')/Telsa"/>
Как закодировать ключ поиска, хотя?
<xsl:value-of select="key('table-lookup', $curr_key, $LookupDoc)/@ElementType"/>
Единственным недостатком этого является то, что реализация match() может быть более эффективной, если регулярное выражение известно статически, то есть, если оно записано как строковый литерал внутри вызова функции, –