小编Ris*_*nst的帖子

XML Schema元素的顺序

在我的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)

xsd

15
推荐指数
3
解决办法
1万
查看次数

使用XPath拆分节点值

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()功能?)

xml xpath-2.0

10
推荐指数
1
解决办法
1万
查看次数

如何在BizTalk管道组件中有效地修改流中的文本?

我有一个包含文本的流,现在我想在该流中编辑一些文本(替换一些值).

最有效的方法是什么,所以不打破流?我想在自定义管道组件中使用它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().

有没有更好的方法来做到这一点?

c# biztalk inputstream custom-pipeline-component

6
推荐指数
2
解决办法
6962
查看次数

在c#中使用正则表达式删除字符

我不是正则表达式专家,所以我需要一些帮助.我有一个文本文件,我需要删除一些尾随分隔符.文本文件如下所示:

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|

谢谢

c# regex

6
推荐指数
1
解决办法
4337
查看次数

xsl转换

我是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我怎么能这样做,我试过了有一个循环和变量,但变量是不可变的,所以我不知道如何实现这一点.

谢谢你的帮助

xml xslt

5
推荐指数
1
解决办法
561
查看次数

T-SQL确定"乱序"记录

我正在使用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 t-sql sql-server

5
推荐指数
1
解决办法
1044
查看次数

SQL进程XML性能:插入表中的列

我在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.

提前致谢.

xml sql-server stored-procedures sql-server-2012

4
推荐指数
1
解决办法
1508
查看次数

正则表达式替换为notepad ++

我需要做一个正则表达式查找和替换:

一切

"<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())替换它

谢谢

regex notepad++

0
推荐指数
1
解决办法
354
查看次数