powered by simpleCommunicator - 2.0.31     © 2024 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как отфильтровать табличку с помощью XSLT
9 сообщений из 9, страница 1 из 1
Как отфильтровать табличку с помощью XSLT
    #39780237
aron19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток! имеется такой XML

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
<xsd:element name="">
		<xsd:annotation>
			<xsd:documentation>Элементы</xsd:documentation>
		</xsd:annotation>
	<xsd:complexType>
	<xsd:sequence>
		<xsd:element name="Элемент1" minOccurs="1" maxOccurs="unbounded">
			<xsd:annotation>
				<xsd:documentation>Элемент1</xsd:documentation>
			</xsd:annotation>
    <xsd:complexType>
         <xsd:sequence>
			<xsd:element name="Элемент1.1" type="xsd:string" minOccurs="1" maxOccurs="unbounded">
				<xsd:annotation>
				   <xsd:documentation>Элемент1.1</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="Элемент1.2" minOccurs="1" maxOccurs="1">
               <xsd:annotation>
                  <xsd:documentation>Элемент1.2</xsd:documentation>
               </xsd:annotation>
               <xsd:complexType>
                  <xsd:sequence>
				     <xsd:element name="Элемент1.2.1" minOccurs="1" maxOccurs="1">
                        <xsd:annotation>
							<xsd:documentation>Элемент1.2.1</xsd:documentation>
                        </xsd:annotation>
                       </xsd:element>
					 <xsd:element name="Элемент1.2.2" minOccurs="1" maxOccurs="1">
                        <xsd:annotation>
                           <xsd:documentation>Элемент1.2.2</xsd:documentation>
                        </xsd:annotation>
                       </xsd:element>
                     <xsd:element name="Элемент1.2.3" minOccurs="1" maxOccurs="1">
                        <xsd:annotation>
                           <xsd:documentation>Элемент1.2.3</xsd:documentation>
                        </xsd:annotation>
                       </xsd:element>
                    </xsd:sequence>
               </xsd:complexType>
            </xsd:element>
			    <xsd:element name="Элемент1.3" minOccurs="0" maxOccurs="unbounded">
	     <xsd:annotation>
                <xsd:documentation>Элемент1.3.1</xsd:documentation>
              </xsd:annotation>
				<xsd:complexType>
                    <xsd:sequence>
                     <xsd:element name="Элемент1.3.2" minOccurs="0">
                        <xsd:annotation>
                           <xsd:documentation>Элемент1.3.2</xsd:documentation>
                        </xsd:annotation>
                        </xsd:element>
			      <xsd:element name="Элемент1.3.3" minOccurs="0">
                        <xsd:annotation>
                           <xsd:documentation>Элемент1.3.3</xsd:documentation>
                        </xsd:annotation>
                       </xsd:element>
					 <xsd:element name="Элемент1.3.4" minOccurs="0">
                        <xsd:annotation>
                           <xsd:documentation>Элемент1.3.4</xsd:documentation>
                        </xsd:annotation>
                    </xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="Таблица1.4" minOccurs="1" maxOccurs="1">
               <xsd:annotation>
                  <xsd:documentation>Таблица1.4</xsd:documentation>
               </xsd:annotation>
               <xsd:complexType>
                  <xsd:sequence>
                     <xsd:element name="Элемент1.4.1" minOccurs="1" maxOccurs="unbounded">
                        <xsd:annotation>
                           <xsd:documentation>Элемент1.4.1</xsd:documentation>
                        </xsd:annotation>
                        <xsd:complexType>
                           <xsd:sequence>
			         <xsd:element name="Элемент1.4.1.1" type="xsd:string" minOccurs="1" maxOccurs="unbounded">
					<xsd:annotation>
					<xsd:documentation>Элемент1.4.1.1</xsd:documentation>
					</xsd:annotation>
					</xsd:element>
                              <xsd:element name="Элемент1.4.1.2" minOccurs="1" maxOccurs="1">
                                 <xsd:annotation>
                                    <xsd:documentation>Элемент1.4.1.2</xsd:documentation>
                                 </xsd:annotation>
                                 </xsd:element>
                              <xsd:element name="Элемент1.4.1.3" minOccurs="1" maxOccurs="1">
                                 <xsd:annotation>
                                    <xsd:documentation>Элемент1.4.1.3</xsd:documentation>
                                 </xsd:annotation>
                                 </xsd:element>
                              <xsd:element name="Элемент1.4.1.4" minOccurs="1" maxOccurs="1">
                                 <xsd:annotation>
                                    <xsd:documentation>Элемент1.4.1.4</xsd:documentation>
                                 </xsd:annotation>
                                 </xsd:element>
                              <xsd:element name="Элемент1.4.1.5" minOccurs="1" maxOccurs="1">
                                 <xsd:annotation>
                                    <xsd:documentation>Элемент1.4.1.5</xsd:documentation>
                                 </xsd:annotation>
                                 </xsd:element>
		
          



Подскажите пожалуйста, как на выходе получить только Таблицу 1.4, и не захватить ничего лишнего
...
Рейтинг: 0 / 0
Как отфильтровать табличку с помощью XSLT
    #39780457
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
6.
7.
<xsl:template match="/">
  <xsl:apply-templates select="root/Элемент1/Элемент1/Таблица1.4"/>
</xsl:template>

<xsl:template match="Таблица1.4">
  <xsl:copy/>
</xsl:template>


Где root название вот этогоaron19
Код: xml
1.
<xsd:element name="">

узла
...
Рейтинг: 0 / 0
Как отфильтровать табличку с помощью XSLT
    #39785204
aron19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_ , спасибо большое за ответ, а как сделать так, что бы в этой отсортированной табличке ,в узле "Элемент1.4.1.2" были перечислены колы систем, для которых данная строка является релевантной?
...
Рейтинг: 0 / 0
Как отфильтровать табличку с помощью XSLT
    #39785390
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aron19как сделать так, что бы в этой отсортированной табличке ,в узле "Элемент1.4.1.2" были перечислены колы систем, для которых данная строка является релевантной?Попробуйте еще раз объяснить, что вам нужно.

И приведите XML, а не XSD схему
...
Рейтинг: 0 / 0
Как отфильтровать табличку с помощью XSLT
    #39785473
aron19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется только XSD схема ) из которой мне нужно отфильтровать только небольшую часть ,а именно табличку 1.4. И сделать так, что бы на выходе после преобразования у меня были только значения элементов, которые входят в эту табличку. Но при всё при этом у элемента 1.4.1.2 может быть не одно значение, а несколько. И нужно сделать их перечисление с помощью ";". Как то так.
...
Рейтинг: 0 / 0
Как отфильтровать табличку с помощью XSLT
    #39785585
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aron19Имеется только XSD схема ) из которой мне нужно отфильтровать только небольшую частьВы на преобразование отдаете XML или XSD?
aron19. Но при всё при этом у элемента 1.4.1.2 может быть не одно значение, а несколькоXSD-схема с вами не согласна
aron19
Код: javascript
1.
<xsd:element name="Элемент1.4.1.2" minOccurs="1" maxOccurs="1">
...
Рейтинг: 0 / 0
Как отфильтровать табличку с помощью XSLT
    #39785588
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<xsl:template match="/">
  <xsl:apply-templates select="Элементы/Элемент1/Элемент1/Таблица1.4"/>
</xsl:template>

<xsl:template match="Элемент1.4.1.2">
  <xsl:if test="position() != 1">
    <xsl:text>;</xsl:text>
  </xsl:if>
  <xsl:value-of select="."/>
</xsl:template>

<xsl:template match="*">
  <xsl:copy>
    <xsl:apply-templates select="*"/>
  </xsl:copy>
</xsl:template>
...
Рейтинг: 0 / 0
Как отфильтровать табличку с помощью XSLT
    #39789702
aron19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,
Спасибо, за все сообщения выше разобрался с XSD и XML)
Имеется вот такая XML
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
   <ns0:Элементы>
      <ns0:Элемент1/>
      <ns0:Элемент2>
         <ns0:Элемент2.1/>
         <ns0:Элемент2.2/>
         <ns0:Элемент2.3/>
         <ns0:Элемент2.4/>
         <ns0:Элемент2.5/>
         <ns0:Элемент2.6/>
       </ns0:Элемент2>
      <ns0:Элемент3>
         <ns0:Эелемент3.1/>
         <ns0:Эелемент3.2/>
         <ns0:Эелемент3.3/>
      </ns0:Эелемент3>
      <ns0:Эелемент4>
         <ns0:Эелемент4.1>
            <ns0:Эелемент4.1.1/>ABC</ns0:Элемент4.1.1>
            <ns0:Эелемент4.1.2>DEF</ns0:Элемент4.1.1>
            <ns0:Эелемент4.1.3/>123</ns0:Элемент4.1.1>
            <ns0:Эелемент4.1.4/>444</ns0:Элемент4.1.1>
            <ns0:Эелемент4.1.5/>321</ns0:Элемент4.1.1>
         </ns0:Эелемент4.1>
 <ns0:Эелемент4.1>
            <ns0:Эелемент4.1.1/>123</ns0:Элемент4.1.1>
            <ns0:Эелемент4.1.2>555</ns0:Элемент4.1.1>
            <ns0:Эелемент4.1.3/>123</ns0:Элемент4.1.1>
            <ns0:Эелемент4.1.4/>444</ns0:Элемент4.1.1>
            <ns0:Эелемент4.1.5/>321</ns0:Элемент4.1.1>
         </ns0:Эелемент4.1>
      </ns0:Эелемент4>
   </ns0:Элементы>



для фильтрации использую следующую xsl
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="http://www.w3.org/1999/XSL/Transform2">
<xsl:output method="xml"/>
<xsl:variable name="System" select="ABC"/>

 
<xsl:template match="node()|@*">
  <xsl:copy>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>
  
 <xsl:template match="ns0:Эелемент4.1">
 <xsl:if test="ns0:System =ABC">
  <xsl:copy-of select="*"/>
  </xsl:if>
 </xsl:template>
</xsl:stylesheet>


На выходе получаю следующее
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<ns0:Элементы>
      <ns0:Элемент1/>
      <ns0:Элемент2>
         <ns0:Элемент2.1/>
         <ns0:Элемент2.2/>
         <ns0:Элемент2.3/>
         <ns0:Элемент2.4/>
         <ns0:Элемент2.5/>
         <ns0:Элемент2.6/>
       </ns0:Элемент2>
      <ns0:Элемент3>
         <ns0:Эелемент3.1/>
         <ns0:Эелемент3.2/>
         <ns0:Эелемент3.3/>
      </ns0:Эелемент3>
      <ns0:Эелемент4>
         <ns0:Эелемент4.1>
           
         </ns0:Эелемент4.1>
      </ns0:Эелемент4>
   </ns0:Элементы>



а ожидаю получить отсортированную xml где в элементе 4.1.1 имеется ABC
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
<ns0:Элементы>
      <ns0:Элемент1/>
      <ns0:Элемент2>
         <ns0:Элемент2.1/>
         <ns0:Элемент2.2/>
         <ns0:Элемент2.3/>
         <ns0:Элемент2.4/>
         <ns0:Элемент2.5/>
         <ns0:Элемент2.6/>
       </ns0:Элемент2>
      <ns0:Элемент3>
         <ns0:Эелемент3.1/>
         <ns0:Эелемент3.2/>
         <ns0:Эелемент3.3/>
      </ns0:Эелемент3>
      <ns0:Эелемент4>
         <ns0:Эелемент4.1>
            <ns0:Эелемент4.1.1/>ABC</ns0:Элемент4.1.1>
            <ns0:Эелемент4.1.2>DEF</ns0:Элемент4.1.1>
            <ns0:Эелемент4.1.3/>123</ns0:Элемент4.1.1>
            <ns0:Эелемент4.1.4/>444</ns0:Элемент4.1.1>
            <ns0:Эелемент4.1.5/>321</ns0:Элемент4.1.1>
         </ns0:Эелемент4.1>
         </ns0:Эелемент4>
   </ns0:Элементы>



Подскажите в чем может быть ошибка?
...
Рейтинг: 0 / 0
Как отфильтровать табличку с помощью XSLT
    #39789741
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aron19Подскажите в чем может быть ошибка?Вот эта строка
aron19
Код: xml
1.
<xsl:if test="ns0:System =ABC">

Проверяет равно ли значение узла ns0:System узлу ABC. Т.к. вам нужно проверить на равенство строке то ABC нужно взять в кавычки
Код: xml
1.
2.
3.
4.
5.
<xsl:template match="ns0:Эелемент4.1">
  <xsl:if test="ns0:System = 'ABC'">
    <xsl:copy-of select="*"/>
  </xsl:if>
</xsl:template>


И смысла в этой строкеaron19
Код: xml
1.
<xsl:variable name="System" select="ABC"/>

я не вижу

Второй вариант решения - определить фильтрующий шаблон
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:ns0="http://www.w3.org/1999/XSL/Transform2">

  <!-- Для всех ns0:Элемент4.1 у которых дочерний элемент ns0:Эелемент4.1.1
        не равен 'ABC' - ничего делать не нужно -->
  <xsl:template match="ns0:Элемент4.1[ns0:Эелемент4.1.1 != 'ABC']"/>

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

Что будет работать быстрее - не знаю
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как отфильтровать табличку с помощью XSLT
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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