草庐IT

c# - 如何在 .net 中读取具有不同层次结构的 xml 文件

coder 2024-06-27 原文

我有 7GB 的大 xml 文件,我在这里粘贴了一小部分

       <?xml version="1.0" encoding="UTF-8"?>
    <bulkFile xmlns:un="utranNrm.xsd"
        xmlns:es="Attributes.15.25.xsd"
        xmlns:xn="generic.xsd" xmlns:gn="geran.xsd" xmlns="configData.xsd">
      <fileHeader fileFormatVersion="32.615 V4.5" Name="Wmart"/>
      <configData dnPrefix="Undefined">
        <xn:SubNetwork id="M_ROOT">
          <xn:VsDataContainer id="1">
            <xn:attributes>
              <xn:vsDataType>vsDataAreas</xn:vsDataType>
              <xn:vsDataFormatVersion>SpecificAttributes</xn:vsDataFormatVersion>
              <es:vsDataAreas/>
            </xn:attributes>
            <xn:VsDataContainer id="424_2_2">
              <xn:attributes>
                <xn:vsDataType>vsDataPlmn</xn:vsDataType>
                <xn:vsDataFormatVersion>SpecificAttributes</xn:vsDataFormatVersion>
                <es:vsDataPlmn>
                  <es:userLabel></es:userLabel>
                  <es:mcc>424</es:mcc>
                  <es:mnc>2</es:mnc>
                  <es:mncLength>2</es:mncLength>
                  <es:aliasPlmnIdentities>
                    <es:mcc>424</es:mcc>
                    <es:mnc>2</es:mnc>
                    <es:mncLength>2</es:mncLength>
                  </es:aliasPlmnIdentities>
                </es:vsDataPlmn>
              </xn:attributes>
              <xn:VsDataContainer id="10">
                <xn:attributes>
                  <xn:vsDataType>vsDataLocationArea</xn:vsDataType>
                  <xn:vsDataFormatVersion>SpecificAttributes</xn:vsDataFormatVersion>
                  <es:vsDataLocationArea>
                    <es:userLabel></es:userLabel>
                    <es:lac>10</es:lac>
                    <es:t3212>10</es:t3212>
                    <es:att>1</es:att>
                  </es:vsDataLocationArea>
                </xn:attributes>
              </xn:VsDataContainer>
            </xn:VsDataContainer>
          </xn:VsDataContainer>
          <xn:SubNetwork id="G-Mum">
            <xn:attributes>
              <xn:userDefinedNetworkType>SiteSolutions</xn:userDefinedNetworkType>
              <xn:userLabel>G-Mum</xn:userLabel>
            </xn:attributes>
            <xn:MeContext id="32509_I_East">
              <xn:VsDataContainer id="23502_I_AAN_UAEU_Crescent_East">
                <xn:attributes>
                  <xn:vsDataType>vsDataMeContext</xn:vsDataType>
                  <xn:vsDataFormatVersion>EricssonSpecificAttributes.15.25</xn:vsDataFormatVersion>
                  <es:vsDataMeContext>
                    <es:userLabel>23502_I_AAN_UAEU_Crescent_East</es:userLabel>
                    <es:ipAddress>10.235.20.10</es:ipAddress>
                    <es:neMIMversion>vF.1.108</es:neMIMversion>
                    <es:lostSynchronisation>SYNCHRONISED</es:lostSynchronisation>
                    <es:bcrLastChange>1474785017888</es:bcrLastChange>
                    <es:bctLastChange>1470699087457</es:bctLastChange>
                    <es:multiStandardRbs6k>false</es:multiStandardRbs6k>
                    <es:mixedModeRadio>false</es:mixedModeRadio>
                    <es:mirrorMIBversion>F.1.100.S.1.6</es:mirrorMIBversion>
                    <es:stnNodes></es:stnNodes>
                  </es:vsDataMeContext>
                </xn:attributes>
              </xn:VsDataContainer>
              <xn:ManagedElement id="1">
                <xn:attributes>
                </xn:attributes>
                <xn:VsDataContainer id="1">
                  <xn:attributes>
                    <xn:vsDataType>vsDataManagedElement</xn:vsDataType>
                    <xn:vsDataFormatVersion>Attributes.15.25.xsd</xn:vsDataFormatVersion>
                    <es:vsDataManagedElement>
                      <es:siteRef>SubNetwork=M_ROOT,Site=32509_I_East</es:siteRef>
                      <es:productType>Node</es:productType>
                      <es:productName>RBS6601L</es:productName>
                      <es:productNumber></es:productNumber>
                      <es:productRevision></es:productRevision>
                      <es:prodDesignation>0</es:prodDesignation>
                    </es:vsDataManagedElement>
                  </xn:attributes>
                </xn:VsDataContainer>
                .
                .
                <xn:VsDataContainer id="1">
                  <xn:attributes>
                    <xn:vsDataType>vsDataENodeBFunction</xn:vsDataType>
                    <xn:vsDataFormatVersion>Attributes.15.25.xsd</xn:vsDataFormatVersion>
                    <es:vsDataENodeBFunction>
                      <es:userLabel></es:userLabel>
                      <es:dscpLabel>24</es:dscpLabel>
                      <es:dnsLookupOnTai>1</es:dnsLookupOnTai>
                      <es:eNBId>32509</es:eNBId>
                    </es:vsDataENodeBFunction>
                  </xn:attributes>
                  <xn:VsDataContainer id="BC_3250_32509_L1_B">
                    <xn:attributes>
                      <xn:vsDataType>vsDataEUtranCellFDD</xn:vsDataType>
                      <es:earfcndl>1651</es:earfcndl>
                      <es:earfcnul>19651</es:earfcnul>
                    </xn:attributes>
                  </xn:VsDataContainer>
                  ..
                  <xn:VsDataContainer id="BD_4250_32509_L1_B">
                    <xn:attributes>
                      <xn:vsDataType>vsDataEUtranCellFDD</xn:vsDataType>
                      <es:earfcndl>1651</es:earfcndl>
                      <es:earfcnul>19651</es:earfcnul>
                    </xn:attributes>
                  </xn:VsDataContainer>

                  <xn:VsDataContainer id="CC_3250_32509_L1_C">
                    <xn:attributes>
                      <xn:vsDataType>testranCellFDD</xn:vsDataType>
                      <es:earfcndl>165</es:earfcndl>
                      <es:earfcnul>19651</es:earfcnul>
                    </xn:attributes>
                  </xn:VsDataContainer>
                </xn:VsDataContainer>
                ..

              </xn:ManagedElement>
            </xn:MeContext>
 <xn:MeContext id="32509_I_west">
          <xn:VsDataContainer id="32509_I_AAN_UAEU_Crescent_East">
            <xn:attributes>
              <xn:vsDataType>vsDataMeContext</xn:vsDataType>
              <xn:vsDataFormatVersion>Attributes.15.25</xn:vsDataFormatVersion>
              <es:vsDataMeContext>
                <es:userLabel>32509_I_AAN_UAEU_Crescent_East</es:userLabel>
                <es:ipAddress>10.235.20.10</es:ipAddress>
                <es:neMIMversion>vF.1.108</es:neMIMversion>
                <es:lostSynchronisation>SYNCHRONISED</es:lostSynchronisation>
                <es:bcrLastChange>1474785017888</es:bcrLastChange>
                <es:bctLastChange>1470699087457</es:bctLastChange>
                <es:multiStandardRbs6k>false</es:multiStandardRbs6k>
                <es:mixedModeRadio>false</es:mixedModeRadio>
                <es:mirrorMIBversion>F.1.100.S.1.6</es:mirrorMIBversion>
                <es:stnNodes></es:stnNodes>
              </es:vsDataMeContext>
            </xn:attributes>
          </xn:VsDataContainer>
          <xn:ManagedElement id="1">
            <xn:attributes>
            </xn:attributes>
            <xn:VsDataContainer id="1">
              <xn:attributes>
                <xn:vsDataType>vsDataManagedElement</xn:vsDataType>
                <xn:vsDataFormatVersion>Attributes.15.25.xsd</xn:vsDataFormatVersion>
                <es:vsDataManagedElement>
                  <es:siteRef>SubNetwork=M_ROOT,Site=32509_I_East</es:siteRef>
                  <es:productType>Node</es:productType>
                  <es:productName>RBS6601L</es:productName>
                  <es:productNumber></es:productNumber>
                  <es:productRevision></es:productRevision>
                  <es:prodDesignation>0</es:prodDesignation>
                </es:vsDataManagedElement>
              </xn:attributes>
            </xn:VsDataContainer>
            .
            .
            <xn:VsDataContainer id="1">
              <xn:attributes>
                <xn:vsDataType>vsDataENodeBFunction</xn:vsDataType>
                <xn:vsDataFormatVersion>Attributes.15.25.xsd</xn:vsDataFormatVersion>
                <es:vsDataENodeBFunction>
                  <es:userLabel></es:userLabel>
                  <es:dscpLabel>24</es:dscpLabel>
                  <es:dnsLookupOnTai>1</es:dnsLookupOnTai>
                  <es:eNBId>32509</es:eNBId>
                </es:vsDataENodeBFunction>
              </xn:attributes>
              <xn:VsDataContainer id="CC_3250_32509_L1_B">
                <xn:attributes>
                  <xn:vsDataType>vsDataEUtranCellFDD</xn:vsDataType>
                  <es:earfcndl>1651</es:earfcndl>
                  <es:earfcnul>19651</es:earfcnul>
                </xn:attributes>
              </xn:VsDataContainer>
              ..
              <xn:VsDataContainer id="CD_4250_32509_L1_B">
                <xn:attributes>
                  <xn:vsDataType>vsDataEUtranCellFDD</xn:vsDataType>
                  <es:earfcndl>1651</es:earfcndl>
                  <es:earfcnul>19651</es:earfcnul>
                </xn:attributes>
              </xn:VsDataContainer>

              <xn:VsDataContainer id="DC_3250_32509_L1_C">
                <xn:attributes>
                  <xn:vsDataType>testranCellFDD</xn:vsDataType>
                  <es:earfcndl>165</es:earfcndl>
                  <es:earfcnul>19651</es:earfcnul>
                </xn:attributes>
              </xn:VsDataContainer>
            </xn:VsDataContainer>
            ..

          </xn:ManagedElement>
        </xn:MeContext>
          </xn:SubNetwork>

        </xn:SubNetwork>
      </configData>
    </bulkFile>

在这里,我想获取我声明的 C# 变量的值,类似于 subnetwork , sitename , eNBId , cellname , earfcndlearfcnul 所有信息都位于根标签 <xn:SubNetwork id="M_ROOT"> 下标记,rest all 用于根目录下的所有站点,这里我只粘贴一个站点详细信息。逻辑是

   subnetwork = <xn:SubNetwork id > attribute value
    sitename  =  <xn:MeContext id> attribute value
    eNBId =  <es:eNBId> value, here the important thing is, there will be huge number of `<xn:VsDataContainer id="1">` parent tag,but the filtration is based on `<xn:vsDataType>` inner tag which is of `vsDataENodeBFunction`.
    cellname = `<xn:VsDataContainer id>` attribute value and 
    `earfcndl` and `earfcnul` is values for `<es:earfcndl> and         <es:earfcnul>` tag .Here also filtration is based on      <xn:vsDataType>vsDataEUtranCellFDD</xn:vsDataType>

所以我想得到subnetwork = G-Mum,,sitename = 32509_I_East,,eNBId=32509,,cellname=BC_3250_32509_L1_B,,earfcndl=1651,,earfcnul=19651 .

我在这里做了以下代码,但卡住了,不知道该怎么做。但我可以保证这是我们可以读取 7Gb Xml 文件的唯一方法(xmlreader(XElement)XNode.ReadFrom 方法),其余的将抛出“内存不足异常”

using (XmlReader xr = XmlReader.Create(path))
                {
                    xr.MoveToContent();
                    XNamespace un = xr.LookupNamespace("un");
                    while (xr.Read())
                    {
                        while (xr.NodeType == XmlNodeType.Element && xr.NamespaceURI == un && xr.LocalName == "M_ROOT")
                        {
                            XElement pin = (XElement)XNode.ReadFrom(xr);
                            var data = from atts in pin.Elements(un + "attributes")
                                       select new
                                       {
                                           eNBId= (string)atts.Element(es + "eNBId"),

                                       }
                        }
                    }

编辑 层次结构只有一个 xn:SubNetwork id="M_ROOT"标签,其中包含所有区域,例如再次包含所有站点信息的下标签,再次包含所有类型为 vsDataEUtranCellFDD 的单元格信息

编辑 @jdweng 感谢您的帮助,现在他们又增加了 xml,现在是我们使用 (XElement)XElement.ReadFrom(reader); 获取的代码片段 xml。本身抛出内存不足异常。如何删除不必要的 xml 部分。我的层次结构是

<xn:SubNetwork id="M_ROOT">--------------Root
      <xn:SubNetwork id="G-Mum">---------Region
              <xn:MeContext id="32509_I_East">-----sites
                     <xn:VsDataContainer id="BC_3250_32509_L1_B"> ---Cells
                          <xn:attributes>
                            <xn:vsDataType>vsDataEUtranCellFDD</xn:vsDataType>
                    </xn:MeContext>
                  </xn:SubNetwork>
                </xn:SubNetwork>

所以我在乞求我的问题时发布的是必要的数据,其余所有不必要的

编辑 @jdweng,是的,我发布的内容是必需的,我正在再次编辑我的问题。 层次结构是

`<xn:SubNetwork>`          --------Root  and only one 

然后经过几行 <xn:SubNetwork>包含区域会成组出现,但这里只有id以G-开头有效所以在这里 G-Mum 那么<xn:MeContext>包含站点将以组的形式出现,其中又包含很多 <xn:VsDataContainer> , 但这里有一个包含子节点 <xn:vsDataType>vsDataManagedElement</xn:vsDataType>是有效的一个为了得到<es:eNBId> . 然后再经过几行 <xn:VsDataContainer>子节点 <xn:vsDataType>vsDataEUtranCellFDD</xn:vsDataType> contains cells will come.This(cells) 是最里面的一个。 所以会有大量的<xn:VsDataContainer>会出来,只有子节点<xn:vsDataType>vsDataENodeBFunction</xn:vsDataType>获得 Enbid<xn:vsDataType>vsDataEUtranCellFDD</xn:vsDataType>对于细胞是进口的

编辑 分析大文件后,我开始知道单元格在站点下,但我将其发布在外面,即 vsDataEUtranCellFDD 位于标签 vsDataENodeBFunction 下。我编辑了我发布的 xml

编辑 2016 年 10 月 10 日 xml变化不大,多了一个VsDataContainer以前有没有VsDataContainer<xn:vsDataType>vsDataENodeBFunction</xn:vsDataType> ,因此 vsDataENodeBFunction没抓到。我用了Skip(1)但没用 vsDataManagedElement

最佳答案

您有一个非常大的文件,因此最好使用 XmlReader。试试这段代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication16
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        enum State
        {
            GET_SUBNETWORK,
            GET_MECONTEXT,
            GET_CONTAINERS,
            GET_SUBNETWORK_OR_MECONTEXT
        }
        static void Main(string[] args)
        {
            XmlReaderSettings settings = new XmlReaderSettings() { IgnoreWhitespace = true };
            XmlReader reader = XmlReader.Create(FILENAME, settings);

            reader.ReadToFollowing("SubNetwork", "generic.xsd");
            Network.network.name = reader.GetAttribute("id");
            Network.network.subnetworks = new List<SubNetwork>();

            string xnNameSpace = reader.LookupNamespace("xn");
            reader.ReadToFollowing("SubNetwork", xnNameSpace);

            Sites newSite = null;
            SubNetwork subNetWork = null;
            Boolean endElement = false;

            State state = State.GET_SUBNETWORK;
            while (!reader.EOF)
            {
                switch (state)
                {
                    case State.GET_SUBNETWORK:
                        if (reader.Name != "xn:SubNetwork")
                        {
                            reader.ReadToFollowing("SubNetwork", xnNameSpace);
                        }
                        if (!reader.EOF)
                        {
                            subNetWork = new SubNetwork();
                            Network.network.subnetworks.Add(subNetWork);
                            subNetWork.name = reader.GetAttribute("id");
                            subNetWork.sites = new List<Sites>();

                            state = State.GET_MECONTEXT;
                        }
                        break;

                    case State.GET_MECONTEXT :
                        if (reader.Name != "xn:MeContext")
                        {
                            if (reader.NodeType == XmlNodeType.EndElement)
                            {
                                endElement = true;
                                state = State.GET_SUBNETWORK;
                            }
                            else
                            {
                                endElement = false;
                                reader.ReadToFollowing("MeContext", xnNameSpace);
                            }
                        }
                        if (!reader.EOF && !endElement)
                        {
                            state = State.GET_CONTAINERS;
                            newSite = new Sites();
                            subNetWork.sites.Add(newSite);
                            newSite.sitename = reader.GetAttribute("id");
                            reader.ReadToFollowing("ManagedElement", xnNameSpace);
                            reader.ReadToFollowing("VsDataContainer", xnNameSpace);
                        }
                        break;

                    case State.GET_CONTAINERS:

                        if (!reader.EOF)
                        {
                            switch (reader.NodeType)
                            {
                                case XmlNodeType.EndElement:
                                    state = State.GET_SUBNETWORK_OR_MECONTEXT;
                                    break;
                                case XmlNodeType.Text:
                                    string text = reader.ReadContentAsString();
                                    break;

                                case XmlNodeType.Element:

                                    string elementName = reader.Name;
                                    XElement element = (XElement)XElement.ReadFrom(reader);
                                    if (elementName == "xn:VsDataContainer")
                                    {
                                        XElement vsDataENodeBFunction = element.Descendants().Where(a => a.Name.LocalName == "vsDataENodeBFunction").FirstOrDefault();
                                        if (vsDataENodeBFunction != null)
                                        {                                            
                                            XElement eNBId = element.Descendants().Where(a => a.Name.LocalName == "eNBId").FirstOrDefault();
                                            if (eNBId != null)
                                            {
                                                newSite.eNBId = (int)eNBId;
                                            }
                                        }
                                        List<XElement> vsDataContainers = element.Descendants().Where(a => a.Name.LocalName == "VsDataContainer").ToList();
                                        List<XElement> vsDataEUtranCellFDD = vsDataContainers.Where(x => x.Descendants().Where(a => (a.Name.LocalName == "vsDataType") && ((string)a == "vsDataEUtranCellFDD")).Any()).ToList();
                                        if (vsDataEUtranCellFDD.Any())
                                        {
                                            List<CellName> cells = vsDataEUtranCellFDD.Select(x => new CellName()
                                            {
                                                id = (string)x.Attribute("id"),
                                                earfcndl = (int)x.Descendants().Where(a => a.Name.LocalName == "earfcndl").FirstOrDefault(),
                                                earfcnul = (int)x.Descendants().Where(a => a.Name.LocalName == "earfcnul").FirstOrDefault()
                                            }).ToList();
                                            if (newSite.cellName == null)
                                            {
                                                newSite.cellName = new List<CellName>();
                                            }
                                            newSite.cellName.AddRange(cells);
                                        }
                                    }
                                    break;

                                default:
                                    Console.WriteLine("Unexpected Results");
                                    string elementText = reader.ReadContentAsString();
                                    Console.ReadLine();
                                    break;
                            }
                        }
                        break;

                    case State.GET_SUBNETWORK_OR_MECONTEXT :
                        switch(reader.NodeType)
                        {
                            case XmlNodeType.Element :
                                switch(reader.Name)
                                {
                                    case "xn:MeContext" :
                                        state = State.GET_MECONTEXT;
                                        break;
                                    case "xn:SubNetwork" :
                                        state = State.GET_SUBNETWORK;
                                        break;
                                    default :
                                        reader.ReadStartElement();
                                        break;
                                }
                                break;

                            case XmlNodeType.Text:
                                string text = reader.ReadContentAsString();
                                break;

                            case XmlNodeType.EndElement:
                                reader.ReadEndElement();
                                break;

                            default:
                                Console.WriteLine("Unexpected Results");
                                string elementText = reader.ReadContentAsString();
                                Console.ReadLine();
                                break;

                        }
                        break;
                }
            }
        }

    }
    public class Network
    {
        public static Network network = new Network();
        public string name { get; set; }
        public List<SubNetwork> subnetworks { get; set; }
    }
    public class SubNetwork
    {
        public string name { get; set; }
        public List<Sites> sites { get; set; }

    }
    public class Sites
    {
        public string sitename { get; set; }
        public int eNBId { get; set; }
        public List<CellName> cellName { get; set; }
    }
    public class CellName
    {
        public string id { get; set; }
        public int earfcndl { get; set; }
        public int earfcnul { get; set; }
    }
}

关于c# - 如何在 .net 中读取具有不同层次结构的 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39805526/

有关c# - 如何在 .net 中读取具有不同层次结构的 xml 文件的更多相关文章

  1. ruby - 如何在 Ruby 中顺序创建 PI - 2

    出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

  2. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  3. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  4. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  5. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  6. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  7. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  8. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  9. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  10. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

随机推荐