XSLT способен на это? - PullRequest
4 голосов
/ 09 мая 2011

Это не тот же вопрос, который я задавал ранее (с ^^), так как это другой вопрос, в котором больше шума и ненужного раздела. Во всяком случае, у меня есть текстовый файл, его содержимое:

#HEADER#
Version : 3
EOF : '^'
EOR : '~'
Property Count : 67
Generated Date : 10-March-2011 17:39

#DEFINITION#
AGENT_REF^ADDRESS_1^ADDRESS_2^ADDRESS_3^ADDRESS_4^TOWN^POSTCODE1^POSTCODE2^FEATURE1^FEATURE2^FEATURE3^FEATURE4^FEATURE5^FEATURE6^FEATURE7^FEATURE8^FEATURE9^FEATURE10^SUMMARY^DESCRIPTION^BRANCH_ID^STATUS_ID^BEDROOMS^PRICE^PRICE_QUALIFIER^PROP_SUB_ID^UPDATE_DATE^CREATE_DATE^DISPLAY_ADDRESS^PUBLISHED_FLAG^LET_DATE_AVAILABLE^LET_BOND^LET_TYPE_ID^LET_FURN_ID^LET_RENT_FREQUENCY^TENURE_TYPE_ID^TRANS_TYPE_ID^NEW_HOME_FLAG^MEDIA_IMAGE_00^MEDIA_IMAGE_TEXT_00^MEDIA_IMAGE_01^MEDIA_IMAGE_TEXT_01^MEDIA_IMAGE_02^MEDIA_IMAGE_TEXT_02^MEDIA_IMAGE_03^MEDIA_IMAGE_TEXT_03^MEDIA_IMAGE_04^MEDIA_IMAGE_TEXT_04^MEDIA_IMAGE_05^MEDIA_IMAGE_TEXT_05^MEDIA_IMAGE_06^MEDIA_IMAGE_TEXT_06^MEDIA_IMAGE_07^MEDIA_IMAGE_TEXT_07^MEDIA_IMAGE_08^MEDIA_IMAGE_TEXT_08^MEDIA_IMAGE_09^MEDIA_IMAGE_TEXT_09^MEDIA_IMAGE_10^MEDIA_IMAGE_TEXT_10^MEDIA_IMAGE_11^MEDIA_IMAGE_TEXT_11^MEDIA_IMAGE_12^MEDIA_IMAGE_TEXT_12^MEDIA_IMAGE_13^MEDIA_IMAGE_TEXT_13^MEDIA_IMAGE_14^MEDIA_IMAGE_TEXT_14^MEDIA_IMAGE_15^MEDIA_IMAGE_TEXT_15^MEDIA_IMAGE_16^MEDIA_IMAGE_TEXT_16^MEDIA_IMAGE_17^MEDIA_IMAGE_TEXT_17^MEDIA_IMAGE_18^MEDIA_IMAGE_TEXT_18^MEDIA_IMAGE_19^MEDIA_IMAGE_TEXT_19^MEDIA_IMAGE_20^MEDIA_IMAGE_TEXT_20^MEDIA_IMAGE_21^MEDIA_IMAGE_TEXT_21^MEDIA_IMAGE_22^MEDIA_IMAGE_TEXT_22^MEDIA_IMAGE_23^MEDIA_IMAGE_TEXT_23^MEDIA_IMAGE_24^MEDIA_IMAGE_TEXT_24^MEDIA_IMAGE_25^MEDIA_IMAGE_TEXT_25^MEDIA_IMAGE_26^MEDIA_IMAGE_TEXT_26^MEDIA_IMAGE_27^MEDIA_IMAGE_TEXT_27^MEDIA_IMAGE_28^MEDIA_IMAGE_TEXT_28^MEDIA_IMAGE_29^MEDIA_IMAGE_TEXT_29^MEDIA_IMAGE_30^MEDIA_IMAGE_TEXT_30^MEDIA_IMAGE_31^MEDIA_IMAGE_TEXT_31^MEDIA_IMAGE_32^MEDIA_IMAGE_TEXT_32^MEDIA_IMAGE_33^MEDIA_IMAGE_TEXT_33^MEDIA_IMAGE_34^MEDIA_IMAGE_TEXT_34^MEDIA_IMAGE_35^MEDIA_IMAGE_TEXT_35^MEDIA_IMAGE_36^MEDIA_IMAGE_TEXT_36^MEDIA_IMAGE_37^MEDIA_IMAGE_TEXT_37^MEDIA_IMAGE_38^MEDIA_IMAGE_TEXT_38^MEDIA_IMAGE_39^MEDIA_IMAGE_TEXT_39^MEDIA_IMAGE_40^MEDIA_IMAGE_TEXT_40^MEDIA_IMAGE_60^MEDIA_IMAGE_TEXT_60^MEDIA_IMAGE_61^MEDIA_IMAGE_TEXT_61^MEDIA_FLOOR_PLAN_00^MEDIA_FLOOR_PLAN_TEXT_00^MEDIA_FLOOR_PLAN_01^MEDIA_FLOOR_PLAN_TEXT_01^MEDIA_FLOOR_PLAN_02^MEDIA_FLOOR_PLAN_TEXT_02^MEDIA_FLOOR_PLAN_03^MEDIA_FLOOR_PLAN_TEXT_03^MEDIA_FLOOR_PLAN_04^MEDIA_FLOOR_PLAN_TEXT_04^MEDIA_FLOOR_PLAN_05^MEDIA_FLOOR_PLAN_TEXT_05^MEDIA_DOCUMENT_00^MEDIA_DOCUMENT_TEXT_00^MEDIA_DOCUMENT_01^MEDIA_DOCUMENT_TEXT_01^MEDIA_DOCUMENT_02^MEDIA_DOCUMENT_TEXT_02^MEDIA_DOCUMENT_03^MEDIA_DOCUMENT_TEXT_03^MEDIA_DOCUMENT_04^MEDIA_DOCUMENT_TEXT_04^MEDIA_DOCUMENT_05^MEDIA_DOCUMENT_TEXT_05^MEDIA_DOCUMENT_06^MEDIA_DOCUMENT_TEXT_06^MEDIA_DOCUMENT_07^MEDIA_DOCUMENT_TEXT_07^MEDIA_DOCUMENT_08^MEDIA_DOCUMENT_TEXT_08^MEDIA_DOCUMENT_09^MEDIA_DOCUMENT_TEXT_09^MEDIA_DOCUMENT_10^MEDIA_DOCUMENT_TEXT_10^MEDIA_DOCUMENT_11^MEDIA_DOCUMENT_TEXT_11^MEDIA_DOCUMENT_12^MEDIA_DOCUMENT_TEXT_12^MEDIA_DOCUMENT_13^MEDIA_DOCUMENT_TEXT_13^MEDIA_DOCUMENT_14^MEDIA_DOCUMENT_TEXT_14^MEDIA_DOCUMENT_15^MEDIA_DOCUMENT_TEXT_15^MEDIA_DOCUMENT_16^MEDIA_DOCUMENT_TEXT_16^MEDIA_DOCUMENT_17^MEDIA_DOCUMENT_TEXT_17^MEDIA_DOCUMENT_18^MEDIA_DOCUMENT_TEXT_18^MEDIA_DOCUMENT_19^MEDIA_DOCUMENT_TEXT_19^MEDIA_DOCUMENT_20^MEDIA_DOCUMENT_TEXT_20^MEDIA_DOCUMENT_50^MEDIA_DOCUMENT_TEXT_50^MEDIA_DOCUMENT_51^MEDIA_DOCUMENT_TEXT_51^MEDIA_VIRTUAL_TOUR_00^MEDIA_VIRTUAL_TOUR_TEXT_00^~

#DATA#
12345_ALZ57065V^^Spacious 3 bedroom villa with pool in Vale da Telha^^^^8670-156^^^^^^^^^^^^3 bedrooms villa with pool located in picturesque urbanization of Vale da Telha, on a private corner plot. The villa benefits from all day sun shine.   It has a mature settled garden with low maintenance and offers privacy for the villa. The villa comprises of living/dining room with wooden ceiling making the villa very welcoming. It has an open fireplace. The living room leads to the rustic yet modern kitchen, also on to the swimming pool area with BBQ and garden. Three bedrooms all with fitted wardrobes, (1 en suite) and wooden ceilings. All have good sun exposure, light and bright. The...^3 bedrooms villa with pool located in picturesque urbanization of Vale da Telha, on a private corner plot. The villa benefits from all day sun shine.   It has a mature settled garden with low maintenance and offers privacy for the villa. The villa comprises of living/dining room with wooden ceiling making the villa very welcoming. It has an open fireplace. The living room leads to the rustic yet modern kitchen, also on to the swimming pool area with BBQ and garden. Three bedrooms all with fitted wardrobes, (1 en suite) and wooden ceilings. All have good sun exposure, light and bright. The detached garage has ample storage space in form of a mezzanine, plumbing for washing machine. Irrigation system. A/C that gives hot and cold air and dehumifies. Good investment for those looking for a permanent home.<br/><br/><br/>^12345^0^3^277000^0^^^^Spacious 3 bedroom villa with pool in Vale da Telha, Aljezur, 8670-156^1^^^^^^^1^N^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~
12345_A184ALZ^^Lovely 2 bedroom apartment in Aljezur^^^Algarve^^^^^^^^^^^^^Excellent location for this well presented 2 bedroom apartment situated at the entrance of Aljezur. Within walking distance to all the attractions this portuguese village has to offer including many restaurants, shops and just few minutes drive to the fabulous Amoreira beach. The apartment comprises of a spacious lounge/dining room, 2 bedrooms with fitted wardrobes, fully fitted kitchen, bathroom and a possibility to occupy a  55 m2 area of the attic. Apart from the garage in cave there is a parking space provided which is an excellent asset in the summer months. This property is a perfect residental or holiday home  as well having great rental potential.^Excellent location for this well presented 2 bedroom apartment situated at the entrance of Aljezur. Within walking distance to all the attractions this portuguese village has to offer including many restaurants, shops and just few minutes drive to the fabulous Amoreira beach. The apartment comprises of a spacious lounge/dining room, 2 bedrooms with fitted wardrobes, fully fitted kitchen, bathroom and a possibility to occupy a  55 m2 area of the attic. Apart from the garage in cave there is a parking space provided which is an excellent asset in the summer months. This property is a perfect residental or holiday home  as well having great rental potential.<br/><br/><br/>^12345^0^2^140000^0^^^^Lovely 2 bedroom apartment in Aljezur, Aljezur, Algarve^1^^^^^^^1^N^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~

Возможно ли использование только XSLT (!) Для создания XML-файла, такого как:

<POST>
<AGENT_REF>12345_ALZ57065V</AGENT_REF>
<ADDRESS_2>Spacious 3 bedroom villa with pool in Vale da Telha</ADDRESS_2>
...
</POST>
<POST>
<AGENT_REF>12345_A184ALZ</AGENT_REF>
...
</POST>

В основном, используя ключевые слова DEFINITION (разделенные на ^), чтобы получить значения из DATA, которые при разборе отображаются в том же порядке, что и данные в DEFINITION.

Спасибо

Ответы [ 3 ]

5 голосов
/ 09 мая 2011

Да, возможно, используйте <xsl:analyze-string> для преобразования не XML-данных в XML.

1 голос
/ 09 мая 2011

XSLT используется для преобразования XML.Поскольку первый отправленный вами фрагмент данных не является XML, вы не можете использовать XSLT для этого.

Если вы хотите пойти в обратном направлении, , что будет возможно.

ОБНОВЛЕНИЕ:

Если вы используете XSLT 2.0, обратитесь к ответу @Max Toro.В противном случае это правильно.

0 голосов
/ 09 мая 2011

XSLT 1.0 предназначен для преобразования XML в XML, текст или HTML. Поэтому вход должен быть действительным XML. Хотя технически это можно сделать в вашем примере, заключив в свой ввод какой-либо корневой тег XML (например, <root>) и экранируя некоторые символы (например, &lt;), для этого все равно требуется выполнить синтаксический анализ строк в XSLT, для чего XSLT не предназначен для. Это не невозможно, но это будет очень медленно (и утомительно писать).

Вы можете сначала преобразовать ваш входной файл в действительный xml (например, с помощью perl, awk, sed, python, ...), чтобы получить что-то вроде:

<root>
  <definition>
    <item>AGENT_REF</item>
    <item>ADDRESS_1</item>
    <item>ADDRESS_2</item>
    ...
  </definition>
  <data>
    <line>
      <item>12345_ALZ57065V</item>
      <item/>   <!-- important! -->
      <item>Spacious 3 bedroom villa with pool in Vale da Telha</item>
      <item/>
      ...
    </line>
    <line>
      ...
    </line>
    ...
  </data>
</root>

, а затем преобразовал это с помощью XSLT до желаемого результата.

OTOH, когда данные уже обработаны языком обработки строк (например, perl), это всего лишь очень маленький дополнительный шаг для прямой генерации желаемого XML без использования XSLT вообще.

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