Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / xpath_string по XML / 12 сообщений из 12, страница 1 из 1
10.04.2008, 09:15
    #35247051
Youra Polishuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xpath_string по XML
Есть таблица:
Код: 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
10.04.2008, 10:22
    #35247251
st_serg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xpath_string по XML
viddoc != viddic
...
Рейтинг: 0 / 0
10.04.2008, 12:52
    #35247943
Youra Polishuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xpath_string по XML
SELECT xpath_string("XML",'/Document/typedoc/viddoc')
FROM "TEST";

Так тоже не работает.
...
Рейтинг: 0 / 0
10.04.2008, 12:59
    #35247970
st_serg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xpath_string по XML
Код: 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
10.04.2008, 13:08
    #35248008
Youra Polishuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xpath_string по XML
У меня версия такая же.
Установлена по WinXP.
Где нужно кодировку проверить?
...
Рейтинг: 0 / 0
10.04.2008, 13:12
    #35248021
Youra Polishuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xpath_string по XML
Вот что у меня.

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

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

Последний вопрос. А как все элементы viddoc вывести?
...
Рейтинг: 0 / 0
10.04.2008, 15:19
    #35248665
st_serg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xpath_string по XML
гденить в доках наверное написано..
у меня получилось примерно так (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
10.04.2008, 15:28
    #35248717
st_serg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xpath_string по XML
еще вариант
Код: 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
12.04.2008, 09:54
    #35251225
Youra Polishuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xpath_string по XML
Есть вот такая вот простейшая 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
14.04.2008, 08:22
    #35252511
Youra Polishuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xpath_string по XML
Поравил схему. Теперь экспорт при полном соответствии схеме.
Там в схеме Groups должно стоять string.
Кажется должно так вот работать.
Не работает? Как использовать XPath c документами WordML?
SELECT t.id, xpath_string(t.xml,'//ns0:Groups')
FROM test t
WHERE class=2;
...
Рейтинг: 0 / 0
14.04.2008, 13:50
    #35253416
Youra Polishuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
xpath_string по XML
Вот два 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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / xpath_string по XML / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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