powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / как скопировать родительский узел?
9 сообщений из 9, страница 1 из 1
как скопировать родительский узел?
    #34426868
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго время суток.
У меня такой вопрос.
Как скопировать из одного документа в другой, главный элемент?
Т.Е. имею конструкцию
Код: plaintext
1.
2.
3.
4.
5.
<root defaul="#All" xmlns:...="..."xmlns:...="...">
<teg_a> текст
</teg_a>
<teg_b href="...">текст</teg_b>
<teg_c/>
</root>
Моя задача к примеру скопировать все теги из этого документа кроме <teg_b href="...">текст</teg_b>
Делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 <xsl:template match="node()">
        <xsl:for-each select="node()">
            <xsl:choose>
                <xsl:when test="not(name(.)='teg_b')">
                    <xsl:copy-of select = "."/>
         </xsl:when>
         <xsl:otherwise>
             <xsl:message>Ужаз!!! он  есть</xsl:message>
             <!--<xsl:apply-templates select="teg_b"/>-->
         </xsl:otherwise>
     </xsl:choose>
        </xsl:for-each>
</xsl:template>
Всеб ничего, кроме того что :"node() соответствует любому узлу за исключением узла атрибута и корневого узла"
Попытался так:
Код: plaintext
1.
2.
<xsl:tempate  match="/">
                    <xsl:copy-of select = "."/>
</xsl:template>
Вылезло все, даже то что не надо...
Либо скажите как можно скопировать весь документ (без изменений) , кроме некоторых тегов (указанных мной), либо как скопировать родительский узел, а потом еще умудриться засунуть все остальные в него.
...
Рейтинг: 0 / 0
как скопировать родительский узел?
    #34427269
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю тебе поможет
Microsoft XML Core Services (MSXML) 4.0 - XSLT Reference<xsl:copy> Element
Copies the current node from the source to the output.

Remarks
The <xsl:copy> element creates a node in the output with the same name, namespace, and type as the current node. Attributes and children are not copied automatically. This element makes identity transformation possible.
...
Рейтинг: 0 / 0
как скопировать родительский узел?
    #34427322
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это даже полным кодом навазть нельзя, это просто имена тегов с ns
Код: plaintext
1.
2.
<ns xmlns:sch="http://purl.oclc.org/dsdl/schematron" xmlns:fn="http://www.w3.org/2005/xpath-functions"/>
<title xmlns:sch="http://purl.oclc.org/dsdl/schematron" xmlns:fn="http://www.w3.org/2005/xpath-functions"/>
<phase xmlns:sch="http://purl.oclc.org/dsdl/schematron" xmlns:fn="http://www.w3.org/2005/xpath-functions"/>
че мне с ними делать?
Может код приведешь, может я не так сделал.
Покажи как правильно
...
Рейтинг: 0 / 0
как скопировать родительский узел?
    #34427710
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как говориться: нехочет?, ну и х... с ним!
Сделал так, неправильно, но чего-то не то что ответов не вижу, не вижу что хоть кто то на тему заходил.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<xsl:template match="*">
        <root default="{$phase}">
            <xsl:for-each select="*">
                <xsl:choose>
                    <xsl:when test="not(name(.)='teg_b')">
                        <xsl:copy-of select="."/>
                        <xsl:text>& # 10 ;</xsl:text>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:message>Ужаз!!! он есть</xsl:message>
                        <!--<xsl:apply-templates select="teg_b"/>-->
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:for-each>
        </root>
</xsl:template>
Тема все равно открыто. Дайте правильный вариант!!!
...
Рейтинг: 0 / 0
как скопировать родительский узел?
    #34427715
TiG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SuSaКак говориться: нехочет?, ну и х... с ним!
Сделал так, неправильно, но чего-то не то что ответов не вижу, не вижу что хоть кто то на тему заходил.


Нууу некоторые просто еще и работают иногда, а не только в форумах сидят

Попробуй так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<?xml version="1.0" encoding="Windows-1251" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="/">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="node()|@*">
<xsl:if test="name()!='teg_b'">
  <xsl:copy>
    <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
</xsl:if>
</xsl:template>

</xsl:stylesheet>
...
Рейтинг: 0 / 0
как скопировать родительский узел?
    #34427761
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное человеческое спасибо...
а то я уже 4 часа убил на перебирвание значнений и чтение спецификации.
Работает как надо

З.Ы. Я и так на работе. Тока моя работа в данный момент связана с xsl. А спросить больше не укого, поэтому и приходится параллельно сидеть на форуме
...
Рейтинг: 0 / 0
как скопировать родительский узел?
    #34442606
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравия всем.
У меня снова вопрос. схожий с предыдущим, но немного отличается.
Как скопировать из файла практически все, если файл не является тем который мы обрабатываем. :)
Наверно не очень понятно. Поясню
Есть файл допустим 1.xsl, мы его обрабатываем, в нем есть строка xsl:include href="2.xsl", в нем(2.xsl) есть xsl:include href="3.xsl". Благодаря теме с рекурсией я скопировал все содержимое, но тут одна загвозка. К примеру из файла
2.xsl мне надо скопирвовать все node, кроме родительского (xsl:stylesheet) и node()=xsl:include
...
Рейтинг: 0 / 0
как скопировать родительский узел?
    #34442632
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мля! Ентер нажал... дописать не успел.
ну в общем копирую так
<xsl:copy-of select="document($new)/xsl:stylesheet/*"/>
где $new -передается имя файла к примеру этот же 2.xsl
Выдержка из спецификации:
"xsl:copy-of - Чтобы вставить фрагмент конечного дерева в конечное дерево....Если же результатом является набор узлов, в конечное дерево копируются все узлы этого набора и в том порядке, как они были в документе"
В общем копирует то он копирует. Как заставить его какой то из узлов пропустить?
Нужно скорее всего выражение xPath, у меня не получается его написать
Помогите Плизззз!!!
...
Рейтинг: 0 / 0
как скопировать родительский узел?
    #34442707
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё, вопрос отпал
<xsl:copy-of select="document($new)/xsl:stylesheet/*[not(name()='xsl:include')]"/>
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / как скопировать родительский узел?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]