在我的XSD中,我希望能够指定元素的顺序无关紧要.这就是我所拥有的:
<xs:element name="ADT_A08_231_GLO_DEF">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="EVN_EventTypeSegment" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="PID_PatientIdentificationSegment" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="PD1_PatientAdditionalDemographicSegment" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)
我怎样才能使EVN和PID元素在XML文件中随机出现(首先是EVN,然后是PID或第一个PID元素,然后是EVN元素)?
<EVN_EventTypeSegment>Test</EVN_EventTypeSegment>
<PID_PatientIdentificationSegment>PIDTest</PID_PatientIdentificationSegment>
Run Code Online (Sandbox Code Playgroud)
要么:
<PID_PatientIdentificationSegment>PIDTest</PID_PatientIdentificationSegment>
<EVN_EventTypeSegment>Test</EVN_EventTypeSegment>
Run Code Online (Sandbox Code Playgroud) split()XPath中有某种功能吗?说我有这个XML:
<root>
<path>C:\folder\filename</path>
</root>
Run Code Online (Sandbox Code Playgroud)
我想要检索filename,我该怎么做?我知道我可以得到这样的节点值:
//path/text()
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得文件名?(我知道有一个concat()功能,所以也许有一个split()功能?)
我有一个包含文本的流,现在我想在该流中编辑一些文本(替换一些值).
最有效的方法是什么,所以不打破流?我想在自定义管道组件中使用它BizTalk.
public IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg)
{
string msg = "";
using (VirtualStream virtualStream = new VirtualStream(pInMsg.BodyPart.GetOriginalDataStream()))
{
using(StreamReader sr = new StreamReader(VirtualStream))
{
msg = sr.ReadToEnd();
}
// modify string here
msg = msg.replace("\r\n","");
while (msg.Contains(" <"))
msg = msg.Replace(" <", "<");
VirtualStream outStream = new VirtualStream();
StreamWriter sw = new StreamWriter(outStream, Encoding.Default);
sw.Write(msg);
sw.Flush();
outStream.Seek(0, SeekOrigin.Begin);
pInMsg.BodyPart.Data = outStream;
pContext.ResourceTracker.AddResource(outStream);
}
return pInMsg;
}
Run Code Online (Sandbox Code Playgroud)
这是代码,但正如你所知,我正在打破流sr.ReadToEnd().
有没有更好的方法来做到这一点?
我不是正则表达式专家,所以我需要一些帮助.我有一个文本文件,我需要删除一些尾随分隔符.文本文件如下所示:
MSH|^~\&|OAZIS||||20101029135359||ADT^A31|00000015|P|2.3.1||||||ASCII
EVN|A31|20101029135359^^^^||||19900101
Run Code Online (Sandbox Code Playgroud)
所以我认为最好的方法是做一个Regex替换?任何人都可以帮我这个正则表达式吗?
我想删除^之前的所有内容|
所以test^A^^|必须成为test^A|
谢谢
我是xsl转换的新手,我有一个问题.我循环遍历这样的xml:
<PO>
<Items>
<Item>
<Price>2</Price>
<Quantity>5</Quantity>
</Item>
<Item>
<Price>3</Price>
<Quantity>2</Quantity>
</Item>
</Items>
<QuantityTotal></QuantityTotal>
</PO>
Run Code Online (Sandbox Code Playgroud)
现在我想在QuantityTotal节点中插入一个值:
该值是所有项目的价格*数量的总和,在这种情况下(2*5)+(3*2)= 16我怎么能这样做,我试过了有一个循环和变量,但变量是不可变的,所以我不知道如何实现这一点.
谢谢你的帮助
我正在使用Microsoft SQL服务器,我需要确定表中"不按顺序"的记录.
我将通过一个例子来解释.我有以下表结构:
OrderNumber OrderStatus EventDateTime
0001522989 22 2014-04-14 05:49:25.4414243
0001522989 26 2014-04-14 05:51:16.7047485
0001522989 23 2014-04-14 05:51:17.8602798
0001522990 23 2014-04-14 05:51:19.9603575
0001522990 24 2014-04-14 05:52:06.5803494
0001522990 24 2014-04-14 05:52:06.5803494
Run Code Online (Sandbox Code Playgroud)
现在我需要生成一个"乱序"发送的OrderNumbers列表.因此,在此示例中,列表将只包含一个值:"0001522989".
订单0001522990以正确的顺序发送(第一个状态23,然后是状态24,然后再次发送状态24(这不算作"不按顺序")).
订单0001522989未按正确顺序发送(第一个状态22,然后是状态26,然后是状态23).
有关如何实现这一点的任何想法?
提前致谢.
编辑我添加了一个订单的可能性,连续两次发送相同的状态(这不应该算作"不按顺序")
最好的祝福
我在SQL过程中遇到问题,我似乎找不到合适的解决方案.存储过程包含XML数据类型的一个参数(name = @data).
传入消息的一个示例如下(实际消息包含更多节点,但为简单起见,我将其留下):
<Suppliers xmlns="">
<Supplier>
<IDCONO>3</IDCONO>
<IDSUNO>009999</IDSUNO>
<IDSUTY>0</IDSUTY>
</Supplier>
</Suppliers>
Run Code Online (Sandbox Code Playgroud)
在我的SQL数据库中,我有一个名为"Supplier"的表,它包含与XML中的节点完全相同的列(IDCONO,IDSUNO,IDSUTY,..)
我需要循环遍历节点并在列中插入数据.我已经实现了下面的过程,但是这给了我很多大文件的性能问题(处理时间长,甚至超时):
INSERT INTO SUPPLIER
(IDCONO
,IDSUNO
,IDSUTY)
SELECT
T.C.value('IDCONO[1]', 'VARCHAR(50)') as IDCONO,
T.C.value('IDSUNO[1]', 'VARCHAR(50)') as IDSUNO,
T.C.value('IDSUTY[1]', 'VARCHAR(50)') as IDSUTY
from @data.nodes('/Suppliers/Supplier') T(C)
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!请注意,SQL版本是SQL Server 2012.
提前致谢.
我需要做一个正则表达式查找和替换:
一切
"<xsl:if test="any/text()"
Run Code Online (Sandbox Code Playgroud)
必须被替换
"<xsl:if test="normalize-space(any/text())"
Run Code Online (Sandbox Code Playgroud)
我试过Find:
<xsl:if test="(.*)/text()
Run Code Online (Sandbox Code Playgroud)
替换为
<xsl:if test="normalize-space(\1/text())
Run Code Online (Sandbox Code Playgroud)
但它不起作用..
所以每个if语句都存在/ text(),用normalize-space(../ text())替换它
谢谢