Làm cách nào để hủy XML .docx?


8

Tôi đang cố gắng nhập xml (thực sự là tệp docx) vào cơ sở dữ liệu máy chủ sql 2008. Tôi gần như là một người mới trong lập trình XML. Tôi đã googled rất nhiều nhưng hầu như tất cả các ví dụ có với tệp xml đơn giản. Ở đây tệp xml hơi phức tạp (vui lòng xem bên dưới). Bạn có thể vui lòng cho tôi một số ý tưởng về cách tôi nên tạo bảng cho XML này không và tôi nên chạy truy vấn nào trong máy chủ sql. Tôi cần các giá trị cho tất cả các thẻ, ví dụ: w: rsidP, w: rsidRDefault, w: rsidR của w: p, w: pStyle, w: bookmarkStart, w: t tags, v.v.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml">
<w:body>
<w:p w:rsidR="00EF42E0" w:rsidRDefault="00EF42E0" w:rsidP="00EF42E0">
<w:pPr><w:pStyle w:val="Heading1"/>
</w:pPr><w:bookmarkStart w:id="0" w:name="_Toc212523610"/>
<w:r>
<w:t>Summary</w:t>
</w:r>
<w:bookmarkEnd w:id="0"/>
</w:p>
<w:p w:rsidR="00EF42E0" w:rsidRDefault="00EF42E0" w:rsidP="00EF42E0"><w:pPr><w:pStyle w:val="mainbodytext"/><w:ind w:right="-694"/><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t>What is the Group Defined Practice for Integrity Management?</w:t></w:r></w:p>
<w:p w:rsidR="00EF42E0" w:rsidRDefault="00EF42E0" w:rsidP="00EF42E0"><w:pPr><w:pStyle w:val="mainbodytext"/></w:pPr><w:r><w:t xml:space="preserve">This Practice is derived from the GP Group Standard, GRP 01 January 2006, </w:t></w:r><w:proofErr w:type="gramStart"/><w:r><w:t>Integrity</w:t></w:r><w:proofErr w:type="gramEnd"/><w:r><w:t xml:space="preserve"> Management.  In developing QMS it has been possible to embed much of the content of the IM Standard directly into the Group Essentials statements.  For elements 2, 7, 8 and 9 of the Standard it was possible to do that in their entirety and therefore content of those elements are not repeated within this Practice.</w:t></w:r></w:p></w:body></w:document>

Câu trả lời:


10

Khi làm việc với XML trong SQL Server, bạn sử dụng Phương thức kiểu dữ liệu xml và khi băm nhỏ các tài liệu XML, bạn sử dụng chính xác các phương thức nodes()value(). XML bạn có ở đây cũng bao gồm một số không gian tên, do đó bạn phải chỉ định những không gian tên bạn cần bằng cách sử dụng VỚI XMLNAMESPACES (Transact-SQL) .

XML khá phức tạp nên không biết bạn muốn trích xuất dữ liệu như thế nào, tôi chỉ có thể cung cấp cho bạn một vài truy vấn mẫu mà sau đó bạn có thể sửa đổi thành bất cứ thứ gì bạn cần.

Bạn có bốn w:pnút và đây là một truy vấn tìm nạp các thuộc tính từ các nút đó. Sử dụng @chỉ định rằng đó là giá trị của một thuộc tính bạn muốn-

with xmlnamespaces('http://schemas.openxmlformats.org/wordprocessingml/2006/main' as w)
select P.X.value('@w:rsidR', 'char(8)') as rsidR,
       P.X.value('@w:rsidRDefault', 'char(8)') as rsidRDefault,
       P.X.value('@w:rsidP', 'char(8)') as rsidP
from @doc.nodes('/w:document/w:body/w:p') as P(X);

Câu đố SQL

Nếu bạn ngoài điều đó muốn văn bản trong w:tnút, bạn cần thực hiện một mệnh đề cross applythứ hai nodes()sẽ hủy bỏ XML trong w:pnút.

with xmlnamespaces('http://schemas.openxmlformats.org/wordprocessingml/2006/main' as w)
select P.X.value('@w:rsidR', 'char(8)') as rsidR,
       P.X.value('@w:rsidRDefault', 'char(8)') as rsidRDefault,
       P.X.value('@w:rsidP', 'char(8)') as rsidP,
       T.X.value('text()[1]', 'nvarchar(max)') as Text
from @doc.nodes('/w:document/w:body/w:p') as P(X)
  cross apply P.X.nodes('w:r/w:t') as T(X);

Câu đố SQL

Bạn đã nói trong câu hỏi của mình rằng bạn muốn nhận các giá trị từ tất cả các thẻ. Tôi không biết điều này hữu ích với bạn như thế nào nhưng bạn có thể xây dựng danh sách Tên-Giá trị với tất cả các thuộc tính và thành phần trong XML.

Điều này sẽ cung cấp cho bạn tất cả các yếu tố.

select T.X.value('local-name(.)', 'nvarchar(max)') Name,
       T.X.value('.', 'nvarchar(max)') Value
from @doc.nodes('//*') as T(X)

Thay đổi '//*'để '//@*'và bạn sẽ nhận được tất cả các thuộc tính.

select T.X.value('local-name(.)', 'nvarchar(max)') Name,
       T.X.value('.', 'nvarchar(max)') Value
from @doc.nodes('//@*') as T(X)

Và bạn có thể kết hợp chúng trong một truy vấn là tốt.

select T.X.value('local-name(.)', 'nvarchar(max)') Name,
       T.X.value('.', 'nvarchar(max)') Value
from @doc.nodes('//@*, //*') as T(X)

Câu đố SQL

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.