创建XSD忽略标签
是否有可能建立一个XSD,将治疗任何标签的内容,就像文字?我试图提取标签的有时包含HTML标签的内容。没有固定的HTML格式,并不总是存在。我只想从标签中提取所有文本。 e.g. <content>this is a new piece of content by <b>Person A</b></content>.
我只想提取"this is a new piece of content by <b>Person A</b>"
,但由SSIS生成的模式自然包含这些标记。当我刚加入简单的入门创建XSD忽略标签
<xs:element minOccurs="0" name="content" type="xs:string"></xs:element>
我收到以下错误,并不出人意料。
[XML Source [5]] Error: The XML Source was unable to process the XML data. The element "content" cannot contain a child element. Content model is text only.
认为XSD主要描述为在有效的XML文档中描述允许的标记,而不是定义提取的方法。如果更改的content
类型xs:string
,你宣称标记不中content
,只允许文字,和你得到验证错误反映。
你需要的是选择字符串值content
元素。如果一个XPath上下文不会自动的结果转换为一个字符串值,你可以这样做明确通过string()
XPath函数:
string(/path/to/particular/content)
这将返回所有的孩子的字符串值的串接content
,根据要求省略标签。
更新:重读你的问题,我看到你实际上要检索
"this is a new piece of content by <b>Person A</b>"
(包括b
元素,而不是它的字符串值)。在这里,包装content
元素显然必须在XSD中描述为混合内容(mixed="true"
)。从这种形式的XML文档中提取这些数据通常需要选择文本和元素节点的集合,并将这些数据序列化回单个字符串。我对SSIS提供的细节不够熟悉,但也许我在评论中提到的参考文献可能会有所帮助。
对于用来描述和约束数据的模式(以及我假设的以各种方式引导SSIS)以及您在某些时候想要编写的可执行代码,您并没有很清楚地区分在特定时刻提取您想要的数据。有几件事情你似乎想要或需要:
- 要允许元素内的无约束的XML,你需要一个通配符;请阅读
xsd:any
元素。 - 要提取元素中的文本,您需要XPath
string()
函数(但请注意,您的示例"this is a new piece of content by <b>Person A</b>"
不只是content
的文本,但包含子元素)。 - 要提取
content
元素的内容(这是你显然想要什么,而相比之下,你说你想要的),你会想序列化内容的序列化XML表示;有很多种方法可以做到这一点。
如果我有一个 “这是一个新的内容Person A” 或 “这是一块新的内容由
我不知道你的意思是“因为它们是”。它看起来好像您可能将XML元素看作字符串,可能包含或不包含标记; XSD将XML元素视为树中的节点,可能有也可能没有子节点。你假设'
如果我在
非常感谢。我按照你的建议尝试了。 '' ''This was an error on不支持SSIS选择器元素 –
您需要了解如何在SSIS中使用XPath。请参见[使用XML任务运行XPath查询](http://agilebi.com/jwelch/2008/07/23/使用-xml-task-to-run-an-xpath-query /) – kjhughes