LINUX.ORG.RU

PostgreSQL 8.3.1 выборка из поля типа TEXT


0

0

Есть вот такой вот документ в формате XML.
Документ получен выгрузкой в XML из MS Word 2003 на основе XSD.
Как мне из документа вырезать например возраст.
Вот строчка с возрастом.
<ns0:Age><w:r><w:t>20</w:t></w:r></ns0:Age>
Как выбрать её из поля TEXT, чтобы
1. возвращена цифра 20.
2. возвращена <w:r><w:t>20</w:t></w:r>.
Аналогично фамилию выбрать:
<ns0:SerName><w:r><w:t>Полищук</w:t></w:r></ns0:SerName>
-----------------------------------------------------------------
<?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>1</o:TotalTime><o:Created>2008-04-03T03: 48:00Z</o:Created><o:LastSaved>2008-04-03T03:48:00Z</o:LastSaved><o:Pages>1</o:P ages><o:Words>12</o:Words><o:Characters>69</o:Characters><o:Company>nipigaz</o:C ompany><o:Lines>1</o:Lines><o:Paragraphs>1</o:Paragraphs><o:CharactersWithSpaces >80</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:saveI nvalidXML/><w:ignoreMixedContent w:val="off"/><w:alwaysShowPlaceholderText w:val="off"/><w:compat><w:breakWrappedTables/><w:snapToGridInCell/><w:wrapTextW ithPunct/><w:useAsianBreakRules/><w:dontGrowAutofit/></w:compat></w:docPr><w:bod y><wx:sect><w:p><w:pPr><w:rPr><w:lang w:val="EN-US"/></w:rPr></w:pPr><ns0:Root><w:r><w:t>Студент группы </w:t></w:r><ns0:Groups><w:r><w:t>98 ВМК 1</w:t></w:r></ns0:Groups><w:r><w:t> </w:t></w:r><ns0:Inicial><ns0:SerName><w:r><w:t>Полищук</w:t></w:r></ns0:SerNam e><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:Age><w:r><w:t>20</w:t></w:r></ns0:Age><w:r><w:t> лет.</w:t></w:r></ns0:Root></w:p><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>


Ответ на: комментарий от boombick

может быть при том, что человек хранит данные в базе и не хочет их все тянуть, чтобы получить маааааленькую строчку?

SOmni ★★
()

Кстати в последних версиях DB2 (Express халявен) XML хранится нативно (т.е. валидируется, можно ставить индексы по полям, можно активно смешивать XQuery и SQL).

anonymous
()
Ответ на: комментарий от gods-little-toy

Есть вот такой вот запрос. Он работает.

SELECT xpath('//st:SecondName/text()', '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Root xmlns="urn:student">Студент группы <Groups>98 ВМК 1</Groups> <Inicial><SerName>Полищук</SerName> <FirstName>Юрий</FirstName> <SecondName>Владимирович</SecondName></Inicial>. Возраст <Age>20</Age> лет.</Root>', ARRAY[ARRAY['st', 'urn:student']]);
Есть таблица с полем text.

CREATE TABLE test2
( id integer NOT NULL,
"xml" text,
CONSTRAINT pk2 PRIMARY KEY (id));
Как выполнить такой запрос:

SELECT xpath('//st:SecondName/text()', xml, ARRAY[ARRAY['st', 'urn:student']])
FROM test2
WHERE id=2;
В поле xml записи c id=2 XML из первого запроса.
Как сделать?

А вот этот запрос не работает вообще.
Это запрос по Word документу XML с оформлением.
Что я не так сделал?
SELECT xpath('//ns0:Age/text()', '<?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="urn: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-15T04: 48:00Z</o:Created><o:LastSaved>2008-04-15T04:48:00Z</o:LastSaved><o:Pages>1</o:P ages><o:Words>12</o:Words><o:Characters>69</o:Characters><o:Company>nipigaz</o:C ompany><o:Lines>1</o:Lines><o:Paragraphs>1</o:Paragraphs><o:CharactersWithSpaces >80</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:saveI nvalidXML w:val="off"/><w:ignoreMixedContent w:val="off"/><w:alwaysShowPlaceholderText w:val="off"/><w:compat><w:breakWrappedTables/><w:snapToGridInCell/><w:wrapTextW ithPunct/><w:useAsianBreakRules/><w:dontGrowAutofit/></w:compat></w:docPr><w:bod y><wx:sect><ns0:Root><w:p><w:pPr><w:rPr><w:lang w:val="EN-US"/></w:rPr></w:pPr><w:r><w:t>Студент группы </w:t></w:r><ns0:Groups><w:r><w:t>98 ВМК 1</w:t></w:r></ns0:Groups><w:r><w:t> </w:t></w:r><ns0:Inicial><ns0:SerName><w:r><w:t>Полищук</w:t></w:r></ns0:SerNam e><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:Age><w:r><w:t>20</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>', ARRAY[ARRAY['ns0', 'urn:student']]);

Youra_P
() автор топика
Ответ на: комментарий от Youra_P

а xml документ валиден? а то от m$ всякого можно ожидать..

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.