Учитывая следующий файл xml в качестве входных данных:
<?xml ="1.0" encoding="UTF-8"?>
<TABLE NAME="TABLE.DB">
<DATA RECORDS="2">
<RECORD ID="1">
<RECNO>1</RECNO>
<SEQ>0</SEQ>
<DATE>17/12/1999 2:44:08 μμ</DATE>
<ID>12/11/2015 3:15:25 μμ</ID>
<NUMBER>10355</NUMBER>
<CN>PL</CN>
<PROPERTY>0</PROPERTY>
<DAYS>0</DAYS>
<CURRENTSTATUS>0</CURRENTSTATUS>
<TOTALS>1</TOTALS>
<SUB_A>Some (random) data.</SUB_A>
</RECORD>
<RECORD ID="2">
<RECNO>2</RECNO>
<SEQUENCE>0</SEQUENCE>
<DATE>17/12/1999 2:44:08 μμ</DATE>
<ID>12/11/2015 3:15:25 μμ</ID>
<NUMBER>10356</NUMBER>
<CN>PL 300 L</CN>
<PROPERTY>0</PROPERTY>
<DAYS>10</DAYS>
<CURRENTSTATUS>0</CURRENTSTATUS>
<TOTALS>19837</TOTALS>
</RECORD>
<RECORD ID="3">
<RECNO>3</RECNO>
<SEQUENCE>0</SEQUENCE>
<DATE>17/12/1999 2:44:08 μμ</DATE>
<ID>12/11/2015 3:15:25 μμ</ID>
<NUMBER>10357</NUMBER>
<CN>PL 300 L</CN>
<PROPERTY>0</PROPERTY>
<DAYS>10</DAYS>
<CURRENTSTATUS>0</CURRENTSTATUS>
<SUB_A>Some [more] data.</SUB_A>
</RECORD>
</DATA>
</TABLE>
Я хотел бы вставить данные в элемент SUB_A на основе следующих критериев: у меня есть файл, разделенный вкладками,
value A NUMBER TOTALS
где значение A должно быть введено в элемент SUB_A с символом | в качестве разделителя, если SUB_A уже существует в записи, или должен быть создан, если он не существует. NUMBER и TOTALS — это те, которые нам нужны, чтобы сопоставить записи, в которых будет происходить преобразование. Значение TOTALS, иногда может вообще не существовать в нашем входном текстовом файле:
Итак, наш файл transform.txt выглядит так:
РЕДАКТИРОВАТЬ:
с помощью решения любезно г-н. Хоннен предложил с предложенными входными данными, и когда у меня есть входные данные:
value i'd like to add 10355 1
another) value i'd like to add 10357 19837
yet another value.] 10358
test 10354
я получаю следующую ошибку:
Tree size: 113 nodes, 392 characters, 7 attributes
<line number="10355" totals="1">value i'd like to add</line><line number="10357" totals="19837">another) value i'd like to add</line><line number="10358" totals="">yet another value.]</line><line number="10354" totals="">test</line>
Error at char 6 in xsl:merge-source/@select on line 26 column 65 of merge.xsl:
XTDE2220: Merge input for source line is not ordered according to merge key, detected at
key value: ["10354", ""]
in built-in template rule for /TABLE/DATA[1] in the unnamed mode
at xsl:apply-templates (/merge.xsl#21)
processing /TABLE
Merge input for source line is not ordered according to merge key, detected at key value: ["10354", ""]
Ожидаемый результат:
<?xml ="1.0" encoding="UTF-8"?>
<TABLE NAME="TABLE.DB">
<DATA RECORDS="2">
<RECORD ID="1">
<RECNO>1</RECNO>
<SEQ>0</SEQ>
<DATE>17/12/1999 2:44:08 μμ</DATE>
<ID>12/11/2015 3:15:25 μμ</ID>
<NUMBER>10355</NUMBER>
<CN>PL</CN>
<PROPERTY>0</PROPERTY>
<DAYS>0</DAYS>
<CURRENTSTATUS>0</CURRENTSTATUS>
<TOTALS>1</TOTALS>
<SUB_A>Some (random) data. | value i'd like to add</SUB_A>
</RECORD>
<RECORD ID="2">
<RECNO>2</RECNO>
<SEQUENCE>0</SEQUENCE>
<DATE>17/12/1999 2:44:08 μμ</DATE>
<ID>12/11/2015 3:15:25 μμ</ID>
<NUMBER>10356</NUMBER>
<CN>PL 300 L</CN>
<PROPERTY>0</PROPERTY>
<DAYS>10</DAYS>
<CURRENTSTATUS>0</CURRENTSTATUS>
<TOTALS>19837</TOTALS>
<SUB_A>(another) value i'd like to add</SUB_A>
</RECORD>
<RECORD ID="3">
<RECNO>3</RECNO>
<SEQUENCE>0</SEQUENCE>
<DATE>17/12/1999 2:44:08 μμ</DATE>
<ID>12/11/2015 3:15:25 μμ</ID>
<NUMBER>10357</NUMBER>
<CN>PL 300 L</CN>
<PROPERTY>0</PROPERTY>
<DAYS>10</DAYS>
<CURRENTSTATUS>0</CURRENTSTATUS>
<SUB_A>Some [more] data. | [yet another value.]</SUB_A>
</RECORD>
</DATA>
</TABLE>
то, что я пробовал, сделало бы вопрос еще больше и не приблизило меня к тому, что я ищу ...
<xsl:param name="text-uri" as="xs:string">test2017092101.txt</xsl:param>
на имя файла или URL-адрес текстового файла? Можете ли вы добавить шаблон<xsl:template match="/"><xsl:message select="$lines"/><xsl:apply-templates/></xsl:template>
для проверки правильности преобразования текстовых файлов в элементы XML? 22.09.2017analyze-string
вместоtokenize
, но весь формат этого текста до сих пор недоопределен, чтобы написать хороший шаблон регулярного выражения. Может ли текст перед двумя числами содержать какие-либо цифры? 22.09.2017line number="" totals=""
предполагают, что второй и третий столбцы не были обнаружены. Посмотрите добавленный шаблон в конце ответа и попробуйте использовать его вместо шаблона в полной таблице стилей и проверьте, имеют ли элементыline
атрибуты со значениями из текстового файла. 22.09.2017sort-before-merge="yes"
в источниках слияния. 23.09.2017<xsl:merge-source name="line" select="$lines" sort-before-merge="yes">
, если XML также не упорядочен, добавьте тот же атрибут и к другомуxsl:merge-source
. 23.09.2017<xsl:copy><xsl:apply-templates select="* except SUB_A"/>
должно быть ``‹xsl:copy›‹xsl:apply-templates select=@*, * кроме SUB_A/›`, чтобы скопировать любые атрибуты. 05.10.2017ID
(который, кажется, является числом) или по элементуID
(который, кажется, является некоторым форматом даты). 05.10.2017