Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.19.56.114] |
|
Сообщ.
#1
,
|
|
|
Всем привет!
на входе имеется XML-ина (плоский текст) <ALL> <HEAD attrib="headmaster"> текст1 </HEAD> <BODY attrib1="123" attrib2="1234"> текст2 </BODY> </ALL> структура очень сложная и глубокая. С ней всё в порядке, кроме того, что хочется добавить пробелов В данном случае ALL не должен сдвинуться, HEAD и BODY - должены сдвинуться на 1 пробел, текст1 и текст2 - на 2 пробела. При этом HEAD могут быть как элементами первого уровня, так и пятого (это зависит от) Хочется сделать XSLT преобразование, только что то не совсем понятно как. Вот результат моей попытки: <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" /> <xsl:template match ="HEAD"> <xsl:variable name="indentation" select="count(ancestor::*)"></xsl:variable> <xsl:choose> <xsl:when test='$indentation=1'> <HEAD> <xsl:apply-templates select = "*"/> </HEAD> </xsl:when> <xsl:otherwise> <HEAD> <xsl:apply-templates select = "*"/> </HEAD> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet> сразу видны проблемы: у меня получилось вот что в результате: <HEAD> какой то текст </HEAD> сдвинулся на табуляцию второй HEAD, но не первый, это странно при этом более менее понятно как это сделать с помощью подробной XSLT-шки (где прописали бы каждый тип и каждый атрибут, но это геморойно, не очень хочется связываться с такой бедой, т.к. долго и некрасиво будет). В общем, хотелось бы: 1) задавать количество пробелов переменной (а не прописывать каждый choose) 2) сделать код сразу обобщённым для всех типов узлов и типов атрибутов (не собирать их по кусочкам - геморно) 3) откуда появляется доп. пробел? если вопрос дурацкий, не обессудьте - я на XSLT пишу всего второй день. |