1

私はOpenXMLを学習しようとしてきましたが、Visual Studio c#でフリーテキストの2007.docxファイルを正常に生成しました。その後、ファイルを.xml形式でWordに保存し、.xmlファイルをSQL Server2012のXMLというテーブルのxmlという列にインポートしました。テーブルのコードは次のとおりです。

CREATE TABLE [dbo].[XML](
    [XML_ID] [int] IDENTITY(1,1) NOT NULL,
    [XML] [xml] NOT NULL,
 CONSTRAINT [PK_XML] PRIMARY KEY CLUSTERED 
(
    [XML_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

これが私が実行した挿入物です

INSERT INTO XML(XML)
SELECT * FROM OPENROWSET(
   BULK 'C:\Users\bbt2d\Desktop\Document.xml',
   SINGLE_BLOB) AS x;

select *を実行すると、xmlファイルが表示されましたが、段落のデータの一部をクエリしようとすると、どこにも到達しませんでした。

これがSQLサーバーに保存されているxmlの部分的なスニッパーです:私がプロセスを間違って行ったのか、それともドキュメントからテキストをどのようにクエリするのか疑問に思いました。

?mso-application progid="Word.Document"?>
<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage">
  <pkg:part pkg:name="/_rels/.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="512">
    <pkg:xmlData>
      <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
        <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml" />
        <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml" />
        <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml" />
      </Relationships>
    </pkg:xmlData>
  </pkg:part>
  <pkg:part pkg:name="/word/_rels/document.xml.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="256">
    <pkg:xmlData>
      <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
        <Relationship Id="rId8" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable" Target="fontTable.xml" />
        <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings" Target="settings.xml" />
        <Relationship Id="rId7" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer" Target="footer1.xml" />
        <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml" />
        <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering" Target="numbering.xml" />
        <Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes" Target="endnotes.xml" />
        <Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes" Target="footnotes.xml" />
        <Relationship Id="rId10" Type="http://schemas.microsoft.com/office/2007/relationships/stylesWithEffects" Target="stylesWithEffects.xml" />
        <Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings" Target="webSettings.xml" />
        <Relationship Id="rId9" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml" />
      </Relationships>
    </pkg:xmlData>
  </pkg:part>
  <pkg:part pkg:name="/word/document.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml">
    <pkg:xmlData>
      <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="00C32D34" w:rsidRDefault="00C32D34">
            <w:pPr>
              <w:pStyle w:val="Heading1" />
              <w:spacing w:line="240" w:lineRule="auto" />
              <w:jc w:val="center" />
              <w:rPr>
                <w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" />
                <w:sz w:val="44" />
                <w:szCs w:val="44" />
              </w:rPr>
            </w:pPr>
            <w:r>
              <w:rPr>
                <w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" />
                <w:sz w:val="44" />
                <w:szCs w:val="44" />
              </w:rPr>
              <w:t>School District of Marshfield</w:t>
            </w:r>
          </w:p>
          <w:p w:rsidR="00C32D34" w:rsidRDefault="00C32D34">
            <w:pPr>
              <w:autoSpaceDE w:val="0" />
              <w:autoSpaceDN w:val="0" />
              <w:adjustRightInd w:val="0" />
              <w:spacing w:after="0" w:line="240" w:lineRule="auto" />
              <w:rPr>
                <w:rFonts w:ascii="Cambria" w:hAnsi="Cambria" w:cs="Cambria" />
                <w:b />
                <w:bCs />
                <w:sz w:val="28" />
                <w:szCs w:val="28" />
              </w:rPr>
            </w:pPr>
          </w:p>
          <w:p w:rsidR="00C32D34" w:rsidRDefault="00DE219B">
            <w:pPr>
              <w:autoSpaceDE w:val="0" />
              <w:autoSpaceDN w:val="0" />
              <w:adjustRightInd w:val="0" />
              <w:spacing w:after="0" w:line="240" w:lineRule="auto" />
              <w:jc w:val="center" />
              <w:rPr>
                <w:rFonts w:ascii="Cambria" w:hAnsi="Cambria" w:cs="Cambria" />
                <w:b />
                <w:bCs />
                <w:sz w:val="28" />
                <w:szCs w:val="28" />
              </w:rPr>
            </w:pPr>
            <w:r>
              <w:rPr>
                <w:rFonts w:ascii="Cambria" w:hAnsi="Cambria" w:cs="Cambria" />
                <w:b />
                <w:bCs />
                <w:sz w:val="28" />
                <w:szCs w:val="28" />
              </w:rPr>
              <w:t>Exploring French</w:t>
            </w:r>
            <w:r w:rsidR="00C32D34">
              <w:rPr>
                <w:rFonts w:ascii="Cambria" w:hAnsi="Cambria" w:cs="Cambria" />
                <w:b />
                <w:bCs />
                <w:sz w:val="28" />
                <w:szCs w:val="28" />
              </w:rPr>
              <w:t xml:space="preserve"> &amp; Spanish</w:t>
            </w:r>
4

2 に答える 2

3

投稿したXMLは完全ではありません-テーブルのXMLが完全であると仮定すると、次のようなことを試すことができます(ところで、補足として:列に予約語を使用しないことをお勧めします。列をXMLと呼ばないでください-これは予約済みのキーワードです。XmlDocなどを使用してください。...

-- define the two XML namespaces we need to use to get to the data in question
;WITH XMLNAMESPACES ('http://schemas.microsoft.com/office/2006/xmlPackage' as pkg, 
                     'http://schemas.openxmlformats.org/wordprocessingml/2006/main' as w)
select
    XmlContent.value('(//w:t)[2]', 'varchar(100)')
FROM dbo.YourTable
where ....(some condition here).....

本当に興味深い部分は、データに到達するための適切なXPath式を見つけることです。残念ながら、関心のあるテキストは特にマークされた段落に含まれていないようです。たとえば、<w:r>その<w:rPr>周囲のタグには確認できる特定の属性がないため、実行できるのはそれが興味のあるドキュメントの2番目<w:t>のノードで、その方法でテキストにアクセスします。

于 2013-01-20T09:49:54.657 に答える
1

SQL ServerでXMLデータ型を処理する場合は、常にXqueryを使用することをお勧めします。以下は、Xqueryを明確に理解するためのURLです。 http://www.youtube.com/watch?v=mj4qodGsgDA

于 2013-01-20T07:47:23.280 に答える