[英]How to replace XML string into another XML string
<recurrence>
<interval>1</interval>
<unit>O</unit>
<firsttime>2021-02-12T17:42:00</firsttime>
<lasttime>1900-01-01T12:00:00</lasttime>
</recurrence>
<output>
<outputformat>TXT</outputformat>
<delimiter>,</delimiter>
<filename>testfile1</filename>
<path>\\AIR-LAP-700053\TestGEMOutput</path>
<appendtofile />
<content>
<type>NORMAL</type>
<storedprocedure />
<outputitems>
<outputitem>
<field>
<tablename>VW_DOCUMENT</tablename>
<fieldname>GUID</fieldname>
</field>
<format>
<type>CHAR</type>
<specification />
</format>
</outputitem>
<outputitem>
<field>
<tablename>VW_DOCUMENT</tablename>
<fieldname>PHYSICAL_DOC_GUID</fieldname>
</field>
<format>
<type>CHAR</type>
<specification />
</format>
</outputitem>
<outputitem>
<field>
<tablename>VW_DOCUMENT</tablename>
<fieldname>DOC_TYPE</fieldname>
</field>
<format>
<type>CHAR</type>
<specification />
</format>
</outputitem>
</outputitems>
<criteria>
<criterion>
<field>
<tablename>VW_DOCUMENT</tablename>
<fieldname>DOC_TYPE</fieldname>
</field>
<restriction>
<type>=</type>
<data>Default</data>
<functioncode />
</restriction>
</criterion>
</criteria>
</content>
</output>
我想将上面的 XML 转换为以下预期的 output:
<ExportJobDefinition xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Recurrence>
<Interval>1</Interval>
<Unit>W</Unit>
<FirstTime>2021-02-19T12:36:00Z</FirstTime>
<LastTime>2021-02-24T12:36:00Z</LastTime>
</Recurrence>
<Output>
<OutputFormat>TXT</OutputFormat>
<Delimiter>/</Delimiter>
<FileName>ColdIndexLog</FileName>
<Path>\\MUM-LAP-1092\3PrtyUpgImages\Images\Data\cold\Logs</Path>
<OverwriteFile>O</OverwriteFile>
<Content>
<ContentType>NORMAL</ContentType>
<OutputItems>
<ExportJobOutputItem>
<Field>
<TableName>Document</TableName>
<FieldName>Document / Doc_Ref</FieldName>
</Field>
<Format>
<Specification />
</Format>
</ExportJobOutputItem>
<ExportJobOutputItem>
<Field>
<TableName>Document</TableName>
<FieldName>Document / Doc_Type</FieldName>
</Field>
<Format>
<Specification />
</Format>
</ExportJobOutputItem>
</OutputItems>
<Criteria>
<ExportJobCriterion>
<Field>
<TableName>Document </TableName>
<FieldName>Document / Doc_Type</FieldName>
</Field>
<Restriction>
<RestrictionType>Less than</RestrictionType>
<Data>ABC</Data>
</Restriction>
</ExportJobCriterion>
</Criteria>
</Content>
</Output>
</ExportJobDefinition>
I have check with replace function in SQL but element like "Type" inside XML is exist in different xml parent tags.
我试图获取所有属性,它的值也使用下面的几个 XmlQueries 但没有任何结果:
--DECLARE @temp table (TableName VARCHAR(MAX), FieldName varchar(max))
--INSERT INTO @temp
SELECT tablename = Node.Data.value('(tablename)[1]', 'VARCHAR(MAX)'),
fieldname = Node.Data.value('(fieldname)[1]', 'VARCHAR(MAX)')
FROM @xmlData.nodes('/output/content/outputitems/outputitem/field') Node(Data)
--select * from @temp
--select * from @temp FOR XML PATH('')
--DECLARE @temp1 table (Type VARCHAR(MAX), Specification varchar(max))
--INSERT INTO @temp1
SELECT [type] = Node.Data.value('(type)[1]', 'VARCHAR(MAX)'),
specification = Node.Data.value('(specification)[1]', 'VARCHAR(MAX)')
FROM @xmlData.nodes('/output/content/outputitems/outputitem/format') Node(Data)
--select * from @temp1
--select * from @temp FOR XML PATH('')
--WITH R AS (
--SELECT
-- ElementName = T.x.value('local-name(.)', 'nvarchar(255)'),
-- ElementValue = T.x.value('text()[1]', 'nvarchar(255)'),
-- AttrName = R.x.value('local-name(.)', 'nvarchar(255)'),
-- AttrValue = R.x.value('(.)[1]', 'nvarchar(255)')
--FROM
-- @xmlData.nodes('//*') AS T(x)
-- OUTER APPLY
-- T.x.nodes('@*') AS R(x)
--)
--SELECT
-- CASE WHEN ElementValue IS NULL THEN AttrName ELSE ElementName END AS [Name],
-- COALESCE(ElementValue, AttrValue) AS [Value]
--FROM
-- R
--WHERE
-- ElementValue IS NOT NULL
-- OR AttrValue IS NOT NULL
--GO
请记住这两点: 1. Microsoft SQL Server 是一个非常强大的工具,不仅因为 T-SQL,还因为它集成的工具。 2. XQuery & XPath 是你的朋友。 (:
So if @Input
is a variable containing your first Xml data, you can run the following Select
statement, and apply an XPath query
on your Xml variable:
Declare @Input Xml = '<recurrence>
<interval>1</interval>
<unit>O</unit>......
.......
</recurrence>'
Select @Input.query('
<ExportJobDefinition xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Recurrence>
<Interval>{ data(/recurrence/interval[1]) }</Interval>
<Unit>{ data(/recurrence/unit[1]) }</Unit>
<FirstTime>{ data(/recurrence/firsttime[1]) }</FirstTime>
</Recurrence>
<Output>
<OutputFormat>TXT</OutputFormat>
<Delimiter>/</Delimiter>
<FileName>ColdIndexLog</FileName>
<Path>\\MUM-LAP-1092\3PrtyUpgImages\Images\Data\cold\Logs</Path>
<OverwriteFile>O</OverwriteFile>
<Content>
<ContentType>NORMAL</ContentType>
<OutputItems>
{
for $i in /output[1]/content[1]/outputitems[1]/outputitem
return <ExportJobOutputItem>
<Field>
<TableName>{ data($i/field[1]/tablename) }</TableName>
<FieldName>{ data($i/field[1]/fieldname) }</FieldName>
</Field>
<Format>
<Specification />
</Format>
</ExportJobOutputItem>
}
</OutputItems>
</Content>
</Output>
</ExportJobDefinition>
')
结果将是一个标量 Xml 值:
<ExportJobDefinition xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Recurrence>
<Interval>1</Interval>
<Unit>O</Unit>
<FirstTime>2021-02-12T17:42:00</FirstTime>
</Recurrence>
<Output>
<OutputFormat>TXT</OutputFormat>
<Delimiter>/</Delimiter>
<FileName>ColdIndexLog</FileName>
<Path>\\MUM-LAP-1092\3PrtyUpgImages\Images\Data\cold\Logs</Path>
<OverwriteFile>O</OverwriteFile>
<Content>
<ContentType>NORMAL</ContentType>
<OutputItems>
<ExportJobOutputItem>
<Field>
<TableName>VW_DOCUMENT</TableName>
<FieldName>GUID</FieldName>
</Field>
<Format>
<Specification />
</Format>
</ExportJobOutputItem>
<ExportJobOutputItem>
<Field>
<TableName>VW_DOCUMENT</TableName>
<FieldName>PHYSICAL_DOC_GUID</FieldName>
</Field>
<Format>
<Specification />
</Format>
</ExportJobOutputItem>
<ExportJobOutputItem>
<Field>
<TableName>VW_DOCUMENT</TableName>
<FieldName>DOC_TYPE</FieldName>
</Field>
<Format>
<Specification />
</Format>
</ExportJobOutputItem>
</OutputItems>
</Content>
</Output>
</ExportJobDefinition>
您可以在 Microsoft 网站上阅读有关 XQuery 的所有信息(特别是查找 Xml 构造,并了解运算符/函数)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.