powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / xpath_string по XML
12 сообщений из 12, страница 1 из 1
xpath_string по XML
    #35247051
Youra Polishuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE "TEST"
(
  "N" integer NOT NULL,
  "NAME" character varying( 50 ),
  "XML" text,
  CONSTRAINT "TEST_pkey" PRIMARY KEY ("N")
)
WITH (OIDS=FALSE);
ALTER TABLE "TEST" OWNER TO postgres;
GRANT ALL ON TABLE "TEST" TO postgres;
В таблице одна запись:
1 Документ №1 в поле XML вот что:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<Document>
 <opis> 1 </opis>
 <name>Анкеты и списки членов Иш-кырганского волисполкома и его сельсоветов</name>
 <ndela/>
 <nstr/>
 <sdat> 01 . 01 . 1920 </sdat>
 <edat> 01 . 01 . 1920 </edat>
 <prim/>
 <typedoc>
  <viddoc>Трудовая деятельность</viddoc>
  <viddoc>Социальное положение</viddoc>
 </typedoc>
</Document>

Как вывести все viddoc?

Код: plaintext
1.
SELECT xpath_string("XML",'/Document/typedoc/viddic')
FROM "TEST";

Ничего не выводит? Подскажите как сделать.
...
Рейтинг: 0 / 0
xpath_string по XML
    #35247251
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viddoc != viddic
...
Рейтинг: 0 / 0
xpath_string по XML
    #35247943
Youra Polishuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT xpath_string("XML",'/Document/typedoc/viddoc')
FROM "TEST";

Так тоже не работает.
...
Рейтинг: 0 / 0
xpath_string по XML
    #35247970
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
postgres=# SELECT xpath_string("XML",'/Document/typedoc/viddoc') FROM "TEST";
     xpath_string
-----------------------
 O?oaiaay aayoaeuiinou
( 1  запись)

postgres=# select * from "TEST";
 N | NAME |                                        XML
---+------+------------------------------------------------------------------------------------
  1  | asd  | <Document>
          :  <opis> 1 </opis>
          :  <name>Aieaou e nienee ?eaiia Eo-eu?aaineiai aieeniieeiia e aai naeuniaaoia</name>
          :  <ndela/>
          :  <nstr/>
          :  <sdat> 01 . 01 . 1920 </sdat>
          :  <edat> 01 . 01 . 1920 </edat>
          :  <prim/>
          :  <typedoc>
          :   <viddoc>O?oaiaay aayoaeuiinou</viddoc>
          :   <viddoc>Nioeaeuiia iiei?aiea</viddoc>
          :  </typedoc>
          : </Document>
( 1  запись)

postgres=# select version();
                       version
-----------------------------------------------------
 PostgreSQL  8 . 3 . 1 , compiled by Visual C++ build  1400 
у меня вроде работает...
ps. с кодировками впадлу было заморачиваться
...
Рейтинг: 0 / 0
xpath_string по XML
    #35248008
Youra Polishuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня версия такая же.
Установлена по WinXP.
Где нужно кодировку проверить?
...
Рейтинг: 0 / 0
xpath_string по XML
    #35248021
Youra Polishuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что у меня.

CREATE DATABASE "Example_XML"
WITH OWNER = postgres
ENCODING = 'WIN1251';

Может я библиотеку не подключил.
Я вообще то при установки установил галочку на XML.
...
Рейтинг: 0 / 0
xpath_string по XML
    #35248122
Youra Polishuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставил кодироку UTF. Пишет нормально и xpath работает.
SELECT xpath_string("XML",'/Document/typedoc/viddoc') FROM "TEST";

Последний вопрос. А как все элементы viddoc вывести?
...
Рейтинг: 0 / 0
xpath_string по XML
    #35248665
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гденить в доках наверное написано..
у меня получилось примерно так (ps. доки не читал, метод тыка)
Код: plaintext
1.
2.
3.
4.
5.
6.
postgres=# SELECT * from xpath_table('"N"', '"XML"', '"TEST"', '/Document/typedoc/viddoc', '1=1') as record(id int, s text);
 id |           s
----+-----------------------
   1  | O?oaiaay aayoaeuiinou
   1  | Nioeaeuiia iiei?aiea
( 2  rows)
...
Рейтинг: 0 / 0
xpath_string по XML
    #35248717
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще вариант
Код: plaintext
1.
2.
3.
4.
5.
postgres=# select xpath('/Document/typedoc/viddoc/text()', "XML"::xml) from "TEST";
                      xpath
--------------------------------------------------
 {"O?oaiaay aayoaeuiinou","Nioeaeuiia iiei?aiea"}
( 1  запись)
похоже, что в доках все есть, посмотрите внимательно
...
Рейтинг: 0 / 0
xpath_string по XML
    #35251225
Youra Polishuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть вот такая вот простейшая xsd-схема:
Код: plaintext
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.
<?xml version="1.0" encoding="windows-1251"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:complexType name="TypeInicial">
		<xs:annotation>
			<xs:documentation>Ф.И.О.</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="SerName" type="xs:string">
				<xs:annotation>
					<xs:documentation>Фамилия</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="FirstName" type="xs:string">
				<xs:annotation>
					<xs:documentation>Имя</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="SecondName" type="xs:string">
				<xs:annotation>
					<xs:documentation>Отчество</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	
	<xs:complexType name="Datas">
		<xs:annotation>
			<xs:documentation>Данные студента</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Inicial" type="TypeInicial">
				<xs:annotation>
					<xs:documentation>Ф.И.О.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Age" type="xs:integer">
				<xs:annotation>
					<xs:documentation>Возраст</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Groups" type="xs:integer">
				<xs:annotation>
					<xs:documentation>Группа</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="Root" type="Datas"></xs:element>
</xs:schema>
На основе нее из Word 2003 выгружены 3 документа. Вот пример одного из них:

Код: plaintext
1.
2.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:ns0="student" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve"><o:DocumentProperties><o:Title>Санков Денис Павлович студент группы  98  ВМК  1 </o:Title><o:Author>user</o:Author><o:LastAuthor>user</o:LastAuthor><o:Revision> 2 </o:Revision><o:TotalTime> 0 </o:TotalTime><o:Created> 2008 - 04 -03T04: 27 :00Z</o:Created><o:LastSaved> 2008 - 04 -03T04: 27 :00Z</o:LastSaved><o:Pages> 1 </o:Pages><o:Words> 18 </o:Words><o:Characters> 103 </o:Characters><o:Company>nipigaz</o:Company><o:Lines> 1 </o:Lines><o:Paragraphs> 1 </o:Paragraphs><o:CharactersWithSpaces> 120 </o:CharactersWithSpaces><o:Version> 11 . 5604 </o:Version></o:DocumentProperties><w:fonts><w:defaultFonts w:ascii="Times New Roman" w:fareast="Times New Roman" w:h-ansi="Times New Roman" w:cs="Times New Roman"/></w:fonts><w:styles><w:versionOfBuiltInStylenames w:val="4"/><w:latentStyles w:defLockedState="off" w:latentStyleCount="156"/><w:style w:type="paragraph" w:default="on" w:styleId="a"><w:name w:val="Normal"/><wx:uiName wx:val="Обычный"/><w:rsid w:val="007D0D12"/><w:rPr><wx:font wx:val="Times New Roman"/><w:sz w:val="28"/><w:sz-cs w:val="24"/><w:lang w:val="RU" w:fareast="RU" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="character" w:default="on" w:styleId="a0"><w:name w:val="Default Paragraph Font"/><wx:uiName wx:val="Основной шрифт абзаца"/><w:semiHidden/></w:style><w:style w:type="table" w:default="on" w:styleId="a1"><w:name w:val="Normal Table"/><wx:uiName wx:val="Обычная таблица"/><w:semiHidden/><w:rPr><wx:font wx:val="Times New Roman"/></w:rPr><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="list" w:default="on" w:styleId="a2"><w:name w:val="No List"/><wx:uiName wx:val="Нет списка"/><w:semiHidden/></w:style></w:styles><w:docPr><w:view w:val="print"/><w:zoom w:percent="100"/><w:proofState w:spelling="clean" w:grammar="clean"/><w:attachedTemplate w:val=""/><w:defaultTabStop w:val="708"/><w:punctuationKerning/><w:characterSpacingControl w:val="DontCompress"/><w:optimizeForBrowser/><w:validateAgainstSchema/><w:saveInvalidXML/><w:ignoreMixedContent w:val="off"/><w:alwaysShowPlaceholderText w:val="off"/><w:compat><w:breakWrappedTables/><w:snapToGridInCell/><w:wrapTextWithPunct/><w:useAsianBreakRules/><w:dontGrowAutofit/></w:compat></w:docPr><w:body><wx:sect><ns0:Root><w:p><ns0:Inicial><ns0:SerName><w:r><w:t>Иванов</w:t></w:r></ns0:SerName><w:r><w:t> </w:t></w:r><ns0:FirstName><w:r><w:t>Иван</w:t></w:r></ns0:FirstName><w:r><w:t> </w:t></w:r><ns0:SecondName><w:r><w:t>Иванович</w:t></w:r></ns0:SecondName></ns0:Inicial><w:r><w:t> студент группы </w:t></w:r><ns0:Groups><w:r><w:t> 00  ВМК  2 </w:t></w:r></ns0:Groups><w:r><w:t>. На момент составления документа его возраст составил </w:t></w:r><ns0:Age><w:r><w:t> 19 </w:t></w:r></ns0:Age><w:r><w:t> год.</w:t></w:r></w:p></ns0:Root><w:sectPr><w:pgSz w:w="11906" w:h="16838"/><w:pgMar w:top="1134" w:right="850" w:bottom="1134" w:left="1701" w:header="708" w:footer="708" w:gutter="0"/><w:cols w:space="708"/><w:docGrid w:line-pitch="360"/></w:sectPr></wx:sect></w:body></w:wordDocument>

У меня с обычными XML вроде все получатся стало.
А вот с XML выгруженными из word'а нефига не получается.
Я думаю, может это из-за того, что я сохранил из ворда с ошибками.
Без проверки соотвествия схеме. Сейчас схему скорректировал дабавил, там миксед. Теперь атрибуты могут идти в разном порядке. Но попробовать не успел.
Вот так вот SELECT xpath_string("XML",'*') FROM "TEST"; выводит все значение атрибутов xml.
Больше у меня ничего вывести не получается. Выдается либо ошибка, либо пустая строка.
Я как понимаю, чтобы вывести возраст нужно:
SELECT xpath_string("XML",'/AGE') FROM "TEST";
Так не работает. Что я не так делаю. Может из-за некорректности схемы?
Заранее благодарен.
...
Рейтинг: 0 / 0
xpath_string по XML
    #35252511
Youra Polishuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поравил схему. Теперь экспорт при полном соответствии схеме.
Там в схеме Groups должно стоять string.
Кажется должно так вот работать.
Не работает? Как использовать XPath c документами WordML?
SELECT t.id, xpath_string(t.xml,'//ns0:Groups')
FROM test t
WHERE class=2;
...
Рейтинг: 0 / 0
xpath_string по XML
    #35253416
Youra Polishuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот два XML документа.
Первый выгружен из MS Word и откорректирован вручную.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<Doc>
    <Groups>98ВМК1</Groups>
    <Inicial>
    <SerName>Полищук</SerName>
    <FirstName>Юрий</FirstName>
    <SecondName>Владимирович</SecondName>
    </Inicial>
    <Age> 20 </Age>
</Doc>
Второй без корректировки. Из ворд сохранить только данные.
Код: plaintext
1.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Root xmlns="http://www.w3.org/2001/XMLSchema">Студент группы <Groups> 98  ВМК  1 </Groups> <Inicial><SerName>Полищук</SerName> <FirstName>Юрий</FirstName> <SecondName>Владимирович</SecondName></Inicial>. Возраст <Age> 20 </Age> лет.</Root>
xmlns="http://www.w3.org/2001/XMLSchema" - Выставил руками.

Вот такой запрос делаю:
Код: plaintext
1.
2.
3.
4.
SELECT t.id,
       xpath_string(t.xml,'//SecondName'),
       trim(both 'Age' from t.xml)       
FROM test t
WHERE class in ('7','8');
7 - первый документ, 8 - второй документ.
Выдает
id xpath_string btrim
11 Владимирович Целеком!
12 <пусто> Целеком!

В чем может быть дело.
Может я что-то совсем элементарное не могу сделать. Напишите плиз ссылку на пример.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / xpath_string по XML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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